使用Heroku

时间:2015-11-03 10:33:36

标签: javascript heroku socket.io

我的客户端使用socket.io 1.0+ lib连接到套接字服务器:

$scope.socket = io.connect( "/gateway" );

在服务器端,我将启动快速服务器和套接字服务器连接为:

httpServer = http.createServer( app ).listen( process.env.PORT, process.env.IP || "0.0.0.0", function() { 
    io = require( 'socket.io' )( httpServer ).of("/gateway");
    io.on('connection', function( socket ) {
        // socket events here
    }
});

然后在heroku上测试该项目。让我感到困扰的是this screen from chrome dev tools

你可以看到那里正在执行2个轮询请求。一个人在毫秒秒内获得响应,另一个人需要大约26秒。如果我点击其中一个,我可以看到它们之间的真正区别是请求方法:使用POST的那个获得快速响应,使用GET的人保持处于暂挂状态,直到在~26秒后得到响应(或超时)。 / p>

在我的开发环境中(c9.io)我没有看到这种行为,但在测试(heroku free节点)中,我得到了这个。

可能是因为这个我只在heroku上得到了一些其他奇怪的行为,例如在tab关闭时我没有收到disconnect事件,而在c9上我做..

有人遇到过同样的问题吗?有修复吗?

1 个答案:

答案 0 :(得分:0)

事实证明,当使用polling传输时,长响应被错误地处理为可见的开放连接。在这种情况下,25秒连接保持打开以进行客户端 - 服务器通信。这是正常的,虽然您必须了解它 - 一些记录模块/解决方案可能会将其视为长响应并不断警告您。

简而言之

  • 如果使用sebsocket传输,则会始终打开一个websocket连接
  • 是使用的polling传输,然后每隔25-26秒建立一个新的GET连接。