socket.io创建4000路连接需要5到7秒,是我的程序问题么
发布于 8 年前 作者 wxsong 4040 次浏览 来自 问答

各位好: 最近在用socket.io,所以做了一些测试,但是测试结果不如预期,怀疑是我自己的代码有问题。 我用socket.io ,开了28 * 140 共3920个连接。我测试的结果是,从第一个连接创建到最后一个,总共花费了5秒到7秒多。我本机是 mac ,2.4 GHz Intel Core i5, 内存 4 GB。 我显示怀疑是我本机的问题,后来换了服务器,E5-2650 双核 4G内存。但是测试结果是一样的,都是5秒左右,cpu最高使用15%左右,内存最少剩余2G, 我的问题是,这个结果是正确的么,网上好多上万的连接,创建也比我的时间少。

server计时规则为:第一个连接创建完为开始时间记为conn_s,最后一个连接创建完为结束时间记为conn_e;每创建一个连接,给客户端发送一段字符串。
client计时规则为:程序开始即开始计时记为c_s,第一次收到服务端消息记为conn_s,最后一次收到消息记为conn_e。
实际结果是,服务端从开始到结束需3.8s,客户端,开始计时到第一收到消息为3.0秒,再到最后一次收到消息,又是3.6秒。

代码如下 server.js

var io = require('socket.io')(8082, {
    transports: ['websocket']
});

//开始时间
var conn_s = 100000000000000000000000000000;
//结束时间
var conn_e = 123;
io.on('connection', function (socket) {
    socket.emit("msg", "test123");
    var t = new Date().getTime();
    if(t < conn_s){
        conn_s = t;
    }
    conn_e = t;
});

setInterval(() => {
    console.log("s>>" + conn_s + ">>e>>" + conn_e + ">>" + (conn_e - conn_s));
}, 1000);

client.js

var io = require('socket.io-client');
//房间数量
var roomsNum = 28;
//每个房间人数
var roomUserNum = 140;
var c_s = new Date().getTime();
var conn_s = 100000000000000;
var conn_e = new Date().getTime();

for (var rIndex = 0; rIndex < roomsNum; rIndex++) {
    for (var uIndex = 0; uIndex < roomUserNum; uIndex++) {
        var socket = io('http://127.0.0.1:8082', {transports: ['websocket']});
        socket.on('msg', function () {
            conn_e = new Date().getTime();
            if (conn_e < conn_s) {
                conn_s = conn_e;
            }
        });
    }
}

setInterval(() => {
    console.log("c_s>>" + c_s + ">>" + (conn_s - c_s) + ">>s>>" + conn_s + ">>e>>" + conn_e + ">>" + (conn_e - conn_s));
}, 1000);
2 回复

websocket建立连接的速度就是很慢,因为步骤多一开始是HTTP协议然后再转换协议。 你看的别人测试结果是不是原声socket的。

socket.io 建立链接之前要发3个 ajax请求 https://cnodejs.org/topic/5853e087a670f31b6b4607c6

如果要快,就直接用websocket 不支持websocket的浏览器要另外加载Flash或者用long polling

回到顶部