使用 socket.io 创建多个套接字时的 ENOBUFS

肯特

我正在尝试做的事情:

我编写了一个 node.js 客户端/服务器应用程序,它使用持久的 websocket 连接(无长轮询)。我想对我的服务器进行压力测试,以调整它的性能并了解限制,以便我可以阻止由于过载而导致的新传入连接。不幸的是,我每次都被困在一个特定数量的套接字连接上,因此我认为这可能与操作系统或节点设置有关。

问题:

我有一个创建 10k 套接字连接的客户端,服务器可以很好地处理这个问题。当我用另一个 10k 连接启动第二个客户端时,一旦服务器保持 14k 并发连接,我的客户端应用程序就会开始出现以下错误:

engine.io-client:socket socket close with reason: "transport error" +0ms 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

我的 client1.js 和 client2.js 如下所示:

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

    socket.connect();

    // Send a bit data every 2.5s to simulate a bit traffic
    setInterval(function () {
        socket.emit("sessionCheck", "ok");
    }, 2500);
}

var clients=0;
var id =setInterval(function() {
    createClient();
    clients++;
    if(clients >= 10000)
        clearInterval(id);
}, 1);

我的 server.js 看起来像这样:

var http = require('http');
var httpServer = http.createServer(handler);
var io = require('socket.io')(httpServer, {pingTimeout: 60 * 1000, pingInterval: 5 * 1000});

io.on('connection', function (socket) {
    socket.on('sessionCheck',  function(data){onSessionCheck(socket,data)});
});

setInterval(function(){
    console.log(io.engine.clientsCount + " websockets are connected");
}, 5000);

httpServer.listen(5433, "0.0.0.0", 5000); // port, hostname, backlog

console.log("server running now...");

function onSessionCheck(){
    //console.log("Incoming check");
}

function handler (req, res) {
    fs.readFile(__dirname + '/index.html',
        function (err, data) {
            if (err) {
                res.writeHead(500);
                return res.end('Error loading index.html');
            }

            res.writeHead(200);
            res.end(data);
        })
};
肯特

正如我已经假设的那样,解决方案是 Windows (MaxUserPort) 中的一个选项,您可以在 regedit 中更改该选项。查看 MSDN 说明以了解更多信息:https : //support.microsoft.com/en-us/kb/196271您可以将其设置为最大值 65534。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ENOBUFS when creating to many sockets with socket.io

来自分类Dev

如何使用Vue-Socket.io正确创建自定义套接字方法?

来自分类Dev

使用socket.io通过套接字连接到mysql数据库时出错

来自分类Dev

Socket.io从Node中的多个套接字接收数据

来自分类Dev

在多个文件中使用socket.io

来自分类Dev

使用socket.io-redis的socket.io:将所有套接字对象放在一个房间中

来自分类Dev

如何使用socket.io断开所有服务端的套接字?

来自分类Dev

使用标准Web套接字客户端连接到Socket.io服务器

来自分类Dev

在Node.js中将socket.io与网络套接字一起使用

来自分类Dev

node.js服务中socket.io事件使用的套接字

来自分类Dev

使用Socket.io将套接字传递到Node.js中的模块

来自分类Dev

套接字io在套接字连接时创建房间

来自分类Dev

IO :: Socket与Socket我都“使用”吗?

来自分类Dev

我可以使用什么来唯一标识使用Socket.IO连接到套接字的设备吗?

来自分类Dev

使用Socket.IO创建VOIP聊天应用程序

来自分类Dev

使用Socket.IO创建VOIP聊天应用程序

来自分类Dev

使用RequireJS加载Socket.io时出错

来自分类Dev

尝试使用socket.io时出现错误

来自分类Dev

使用非阻塞IO时关闭UDP套接字

来自分类Dev

在套接字上打印时,IO :: Socket:SSL有时会添加换行符

来自分类Dev

在将SSL套接字打开到socket-io服务器时发生NullPointerException

来自分类Dev

如何在Express 4路由中使用socket.io向连接的套接字发出事件?

来自分类Dev

使用Socket.io代替普通的ajax调用会防止服务器用尽TCP套接字吗?

来自分类Dev

node.js-使用头盔为socket.io(Web套接字)正确的内容安全策略

来自分类Dev

编辑我的HTTP调用以使用套接字(socket.io)通过Angular 2 App中的Observable接收数据

来自分类Dev

在目标 c 中接收 Web 套接字不能与 socket.io 库一起使用

来自分类Dev

如何使用 socket.io 库区分客户端 TCP 套接字和客户端 websocket?

来自分类Dev

使用VUE或vue-socket.io连接Socket.io

来自分类Dev

使用 socket.io 在多个应用程序实例上确保唯一的 socket.id

Related 相关文章

  1. 1

    ENOBUFS when creating to many sockets with socket.io

  2. 2

    如何使用Vue-Socket.io正确创建自定义套接字方法?

  3. 3

    使用socket.io通过套接字连接到mysql数据库时出错

  4. 4

    Socket.io从Node中的多个套接字接收数据

  5. 5

    在多个文件中使用socket.io

  6. 6

    使用socket.io-redis的socket.io:将所有套接字对象放在一个房间中

  7. 7

    如何使用socket.io断开所有服务端的套接字?

  8. 8

    使用标准Web套接字客户端连接到Socket.io服务器

  9. 9

    在Node.js中将socket.io与网络套接字一起使用

  10. 10

    node.js服务中socket.io事件使用的套接字

  11. 11

    使用Socket.io将套接字传递到Node.js中的模块

  12. 12

    套接字io在套接字连接时创建房间

  13. 13

    IO :: Socket与Socket我都“使用”吗?

  14. 14

    我可以使用什么来唯一标识使用Socket.IO连接到套接字的设备吗?

  15. 15

    使用Socket.IO创建VOIP聊天应用程序

  16. 16

    使用Socket.IO创建VOIP聊天应用程序

  17. 17

    使用RequireJS加载Socket.io时出错

  18. 18

    尝试使用socket.io时出现错误

  19. 19

    使用非阻塞IO时关闭UDP套接字

  20. 20

    在套接字上打印时,IO :: Socket:SSL有时会添加换行符

  21. 21

    在将SSL套接字打开到socket-io服务器时发生NullPointerException

  22. 22

    如何在Express 4路由中使用socket.io向连接的套接字发出事件?

  23. 23

    使用Socket.io代替普通的ajax调用会防止服务器用尽TCP套接字吗?

  24. 24

    node.js-使用头盔为socket.io(Web套接字)正确的内容安全策略

  25. 25

    编辑我的HTTP调用以使用套接字(socket.io)通过Angular 2 App中的Observable接收数据

  26. 26

    在目标 c 中接收 Web 套接字不能与 socket.io 库一起使用

  27. 27

    如何使用 socket.io 库区分客户端 TCP 套接字和客户端 websocket?

  28. 28

    使用VUE或vue-socket.io连接Socket.io

  29. 29

    使用 socket.io 在多个应用程序实例上确保唯一的 socket.id

热门标签

归档