我的客户端使用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上我做..
有人遇到过同样的问题吗?有修复吗?
答案 0 :(得分:0)
事实证明,当使用polling
传输时,长响应被错误地处理为可见的开放连接。在这种情况下,25秒连接保持打开以进行客户端 - 服务器通信。这是正常的,虽然您必须了解它 - 一些记录模块/解决方案可能会将其视为长响应并不断警告您。
简而言之
sebsocket
传输,则会始终打开一个websocket连接polling
传输,然后每隔25-26秒建立一个新的GET
连接。