基于heroku socket.io服务器的heroku空闲连接超时

时间:2014-05-17 16:53:55

标签: node.js heroku socket.io

有时我的套接字服务器会引发以下问题:

这里是heroku日志:

heroku[router]: at=error code=H15 desc="Idle connection" method=GET path=/socket.io/1/websocket/RcjG0Zjot1U3uwLWX9SI 
host=www.*********.** request_id=69f5aa39-255b-4871-a928-1548ef2fdd4f 
fwd="217.200.201.210" dyno=web.1 connect=0 service=306473 status=503 bytes=870

我正在使用socket.io库版本0.9.x和节点0.8.x. 它在heroku上托管并激活了websocket(heroku labs:启用websockets -a myapp)。 我没有使用xhr-polling

以下是我实现套接字服务器的方法:

var httpServer = http.createServer(function(request, response) {
  var pathname = url.parse(request.url).pathname;
  if(pathname == "/") pathname = "index.html";
  if(pathname.indexOf("/chat/") != -1  ) pathname = "index.html";
  var filename = path.join(process.cwd(), 'public', pathname);
  path.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, { "Content-Type": "text/plain" });
      response.write("404 Not Found");
      response.end();
      return;
    }
    response.writeHead(200, { 'Content-Type': mime.lookup(filename) });
    fs.createReadStream(filename, {
      'flags': 'r',
      'encoding': 'binary',
      'mode': 0666,
      'bufferSize': 4 * 1024
    }).addListener("data", function(chunk) {
      response.write(chunk, 'binary');
    }).addListener("close", function() {
      response.end();
    });
  });
});


socket_calls = new socket_calls(webSocket, io, connectedUsers,clients );
webSocket.sockets.on('connection',socket_calls.socket_callback_func );
httpServer.listen(process.env.PORT || 8080, "0.0.0.0");

这个问题似乎只出现在3g连接上,而且有些客户报告说这些问题无法连接到服务器。

我尝试使用“网络链路调节器”在3g连接和wi-fi连接的几个设备上重现问题,以模拟连接错误,但我无法重现错误。

1 个答案:

答案 0 :(得分:2)

我已经解决了。 这个问题只出现在3g与TIM职业生涯的联系上。

我已经从heroku命令行工具中禁用了websocket支持,并且我已经在socket.io上启用了xhr-polling。