使用 Heroku 进行套接字轮询的响应时间长
Long response time on socket polling with Heroku
我的客户端正在使用 socket.io
1.0+ lib 连接到套接字服务器:
$scope.socket = io.connect( "/gateway" );
在服务器端,我启动了 express 服务器和 socket 服务器附加为:
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秒。
在我的开发环境中 (c9.io) 我没有看到这种行为,但是在测试中(heroku 免费节点)我明白了。
可能正因为如此,我只在 heroku 上得到了一些其他奇怪的行为,例如在选项卡关闭时我没有收到 disconnect
事件,而在 c9 上我收到了..
有人遇到过同样的问题吗?有修复吗?
事实证明,当使用 polling
传输时,长响应被错误地处理为可见的开放连接。在这种情况下,为客户端-服务器通信保持 25 秒的连接打开状态。这是正常的,尽管您必须了解它 - 某些日志记录 modules/solutions 可能会将其视为长响应并不断警告您。
简而言之
- 如果使用
sebsocket
传输,将始终打开一个 websocket 连接
- 是使用
polling
传输,然后每 25-26 秒就会(重新)建立一个新的 GET
连接。
我的客户端正在使用 socket.io
1.0+ lib 连接到套接字服务器:
$scope.socket = io.connect( "/gateway" );
在服务器端,我启动了 express 服务器和 socket 服务器附加为:
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秒。
在我的开发环境中 (c9.io) 我没有看到这种行为,但是在测试中(heroku 免费节点)我明白了。
可能正因为如此,我只在 heroku 上得到了一些其他奇怪的行为,例如在选项卡关闭时我没有收到 disconnect
事件,而在 c9 上我收到了..
有人遇到过同样的问题吗?有修复吗?
事实证明,当使用 polling
传输时,长响应被错误地处理为可见的开放连接。在这种情况下,为客户端-服务器通信保持 25 秒的连接打开状态。这是正常的,尽管您必须了解它 - 某些日志记录 modules/solutions 可能会将其视为长响应并不断警告您。
简而言之
- 如果使用
sebsocket
传输,将始终打开一个 websocket 连接 - 是使用
polling
传输,然后每 25-26 秒就会(重新)建立一个新的GET
连接。