socket.io 存在轮询、持续连接/断开连接问题

Hor*_*rse 5 node.js socket.io cordova steroids

所以这是一个更大的应用程序的一部分,我试图与集群和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);
});
Run Code Online (Sandbox Code Playgroud)

并在控制台输出

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
Run Code Online (Sandbox Code Playgroud)

这会无限期地持续下去。我正在使用 iPad 进行测试,客户端从 appgyver supersonic 应用程序(cordova 和 javascript)中加载。

当使用 socket.io 聊天示例的分支(针对集群使用进行修改)时,我遇到了同样的问题 - https://github.com/evilstudios/chat-example-cluster

我的问题:为什么有些客户端无法保持连接?如何解决轮询传输不维护单个会话的这些问题?

adv*_*ncd 0

这可能是由于 Node.js 单线程架构造成的。

在这里查看答案: /sf/answers/3606735961/