所以这是一个更大的应用程序的一部分,我试图使用集群和 socket.io-redis 运行它,以便在我将来需要扩展时它可以跨多个 Node 和机器工作。
我似乎遇到了一些客户端无法保持连接的严重问题。一些客户端坚持这样做(主要是 iOS 设备,我认为它必须使用轮询传输),但其他客户端有时工作,有时不工作(我再次将其归因于使用轮询)。
我剥离了一切,结果发现集群不是问题所在。
无论如何我的 server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = process.env.PORT || 3800;
/* -------------------------------- */
io.on('connection', function(socket){
var datetime = new Date().toLocaleString();
console.log(datetime+' - '+'a user connected - '+socket.id);
});
/* -------------------------------- */
http.listen(port, function() {
var datetime = new Date().toLocaleString();
console.log(datetime+' - '+'listening on *:' + port);
});
并在控制台输出
Wed Mar 11 2015 16:22:53 GMT+0000 (GMT) - listening on *:3800
Wed Mar 11 2015 16:22:54 GMT+0000 (GMT) - a user connected - YrLUOrgfpnQVwoWMAAAA
Wed Mar 11 2015 16:22:58 GMT+0000 (GMT) - a user connected - nH6x-97uf3iR2LgNAAAB
Wed Mar 11 2015 16:23:01 GMT+0000 (GMT) - a user connected - VsrFO31elPyKfQJcAAAC
Wed Mar 11 2015 16:23:08 GMT+0000 (GMT) - a user connected - 7xuKZ6aykYIDcxN-AAAD
Wed Mar 11 2015 16:23:15 GMT+0000 (GMT) - a user connected - ZsmZtFHmLrH1DxXWAAAE
Wed Mar 11 2015 16:23:22 GMT+0000 (GMT) - a user connected - HFUApMwwFZallJnQAAAF
这只会无限期地持续下去。我正在用 iPad 测试它,客户端从 appgyver 超音速应用程序(cordova 和 javascript)中加载。
我在使用 socket.io 聊天示例的分支时遇到了同样的问题,为集群使用进行了修改 - https://github.com/evilstudios/chat-example-cluster
我的问题:为什么有些客户端无法保持连接?如何解决轮询传输不维护单个 session 的这些问题?
最佳答案
你必须更新你的 socket.io 前端和后端包,否则你将在传输套接字的方式上出现故障,前端将使用轮询,因此你将有大量的套接字断开连接....
解决方案:前后更新你的socket.io包的版本
关于node.js - socket.io 轮询问题,持续连接/断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992707/