所以,这是一个大型应用的一部分,我试图通过集群和socket.io-redis让它运行,在未来需要进行扩展时,它可以跨多个节点和机器工作。
我似乎遇到了一些严重的问题,有些客户端无法保持连接。一些客户端会持续出现这种情况(主要是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 supersonic应用程序(cordova和javascript)中加载。
当使用socket.io聊天示例的分支(修改为集群使用)时,我遇到了相同的问题 - https://github.com/evilstudios/chat-example-cluster 我的问题:为什么有些客户端无法保持连接?如何解决轮询传输不维护单个会话的问题?