2014-12-14 2 views
2

Я получаю: RqlDriverError: ошибки тайм-аута рукопожатия каждый раз так часто блокируют мой кластер.RethinkDB: RqlDriverError: ошибки тайм-аута установления связи

стек ошибка:

{ 
    "date": "Sun Dec 14 2014 07:59:14 GMT+0000 (Coordinated Universal Time)", 
    "process": { 
    "pid": 10664, 
    "uid": null, 
    "gid": null, 
    "cwd": "D:\\home\\site\\wwwroot", 
    "execPath": "D:\\Program Files (x86)\\nodejs\\0.10.32\\node.exe", 
    "version": "v0.10.32", 
    "argv": [ 
     "node.exe", 
     "D:\\home\\site\\wwwroot\\server.js" 
    ], 
    "memoryUsage": { 
     "rss": 31940608, 
     "heapTotal": 27892736, 
     "heapUsed": 14846880 
    } 
    }, 
    "os": { 
    "loadavg": [ 
     0, 
     0, 
     0 
    ] 
    }, 
    "trace": [ 
    { 
     "column": 13, 
     "file": "D:\\home\\site\\wwwroot\\node_modules\\rethinkdb\\errors.js", 
     "function": "new RqlDriverError", 
     "line": 14, 
     "method": null, 
     "native": false 
    }, 
    { 
     "column": 36, 
     "file": "D:\\home\\site\\wwwroot\\node_modules\\rethinkdb\\net.js", 
     "function": "null._onTimeout", 
     "line": 490, 
     "method": "_onTimeout", 
     "native": false 
    }, 
    { 
     "column": 15, 
     "file": "timers.js", 
     "function": "Timer.listOnTimeout [as ontimeout]", 
     "line": 112, 
     "method": "listOnTimeout [as ontimeout]", 
     "native": false 
    } 
    ], 
    "stack": [ 
    "RqlDriverError: Handshake timedout", 
    " at new RqlDriverError (D:\\home\\site\\wwwroot\\node_modules\\rethinkdb\\errors.js:14:13)", 
    " at null._onTimeout (D:\\home\\site\\wwwroot\\node_modules\\rethinkdb\\net.js:490:36)", 
    " at Timer.listOnTimeout [as ontimeout] (timers.js:112:15)" 
    ], 
    "level": "error", 
    "message": "uncaughtException: Handshake timedout", 
    "timestamp": "2014-12-14T07:59:14.810Z" 
} 

открыть соединение, когда начинается запрос, затем закрыть в конце. Im используя следующее, чтобы открыть соединение:

function createConnection(req, res, next) { 
    r.connect( 
     { 
      host: 'myhost', 
      db: 'mydb', 
      authKey: 'mykey' 
     }, function(err, conn) { 
     if (err) { 
      throw err; 
     } 
     else { 
      // Save the connection in `req` 
      req.conn = conn; 
      _conn = req.conn; 
      // Pass the current request to the next middleware 
      next(); 
     } 
    }); 
} 
app.use(createConnection); 

и следующие за маршрутами были обработаны

function closeConnection(req, res, next) { 
    if(req.conn){ 
     req.conn.close(); 
    } 
    next(); 
} 
app.use(closeConnection); 

Это лучший способ управления связью? Как я могу отслеживать более подробную информацию об этой ошибке.

ответ

1

Вы должны позвонить next с ошибкой, а не просто выбросить ошибку. Вам также необходимо связать слушателя с вашим подключением и прослушать событие «ошибка».

Если вы не хотите иметь дело с этим, вы можете использовать пул соединений, вокруг есть несколько библиотек. Вы также можете использовать rethinkdbdash, у которого есть автоматический пул (вам не нужно приобретать и освобождать соединение, поэтому нет необходимости в промежуточном программном обеспечении).

+0

Спасибо за ответ Майкл, вы действительно правы в следующем (err), но это только передача ошибки. К сожалению, это не препятствует изменению основной проблемы. – Chev

Смежные вопросы