gpt4 book ai didi

node.js - 与 socket.io 的许多并发连接

转载 作者:可可西里 更新时间:2023-11-01 10:43:36 24 4
gpt4 key购买 nike

我是 node.js/socket.io 的新手,正在尝试构建一个需要承受大量并发持久连接的高性能套接字服务器。为了测试限制,我构建了一个创建 10k websockets 的客户端,我没有遇到任何问题。然而,当我将这个数字增加到 20k 时,它会引起问题。服务器和客户端在同一台机器上运行 (windows 10)。

我遇到的问题:

一旦超过 16k 并发连接,我的客户端就会收到以下错误消息:

engine.io-client:socket socket error {"type":"TransportError","description":{"code":"ENOBUFS","errno":"ENOBUFS","syscall":"connect","address":"127.0.0.1","port":5433,"type":"error","target":{"domain":null,"_events":{},"_eventsCount":4,"_socket":null,"_ultron":null,"_closeReceived":false,"bytesReceived":0,"readyState":0,"supports":{"binary":true},"extensions":{},"_isServer":false,"url":"ws://127.0.0.1:5433/socket.io/?EIO=3&transport=websocket","protocolVersion":13,"binaryType":"buffer"}}} +0ms

我尝试了以下方法来解决这个问题:

  1. 使用以下 Node 启动参数增加 Node 进程的可用 RAM:--max-old-space-size=8192
  2. 集群(多个客户端进程)

注意事项:

  1. 运行这些应用程序的机器有 16GB RAM。当两个应用程序都在运行时,8GB RAM 是免费的。
  2. 一旦超过特定数量的套接字连接,服务器就会丢失套接字连接(我认为是因为 ping 超时)。
  3. 只有在创建所有套接字时,CPU 才会达到 100%,否则它会以 25% 的 cpu“空闲”。

我为客户端使用的代码:

var helper=require("./helpers/helper.js");

function log(text){
console.log("[CLIENT] " + text);
}

var blocked = require("blocked");
blocked(function(ms){
console.log("[WARNING] Last client tick took " + ms + "ms!! Clients may not react fast enough....");
}, {threshold: 150});

function createClient(){
var socket = require('socket.io-client')('http://127.0.0.1:5433', {transports:['websocket']});

socket.on('response', function (data) {
console.log("server:" + JSON.stringify(data));
});

socket.on('sessionCheckResponse', function (data) {
//console.log("server:" + JSON.stringify(data));
});

socket.connect();

setInterval(function () {
socket.emit("sessionCheck", "aaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccc");
}, 2500);
}

for(var i=0; i<17000; i++)
createClient();

最佳答案

解决方案可以在这里找到(编辑注册表中的 MaxUserPort 值),显然仅适用于 Windows 环境:https://support.microsoft.com/en-us/kb/196271

关于node.js - 与 socket.io 的许多并发连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37988218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com