socket.io与轮询,常量连接/断开有关

时间:2015-03-11 16:55:04

标签: node.js cordova socket.io 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);
});

并在控制台中输出

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

我的问题:为什么有些客户无法保留连接?如何使用轮询传输修复这些问题而不维护单个会话?

2 个答案:

答案 0 :(得分:0)

这可能是由于node.js单线程体系结构所致。

在此处查看答案: https://stackoverflow.com/a/51524799/996926

答案 1 :(得分:0)

您必须更新socket.io的正面和背面软件包,否则在运输套接字的方式上会出现故障,正面将使用轮询,因此您将出现大量的套接字断开连接....

解决方案:前后更新socket.io软件包的版本