`
hejianhuacn
  • 浏览: 70044 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

socket.io的1000+连接

阅读更多

最近基于socket.io写了个消息服务,使用websocket-bench 在进行压力测试

 

websocket-bench -a 5000 -c 500 http://ip:9080

 发现只要连接超过1000多点,就会失败:

 

 

Launch bench with 5000 total connection, 500 concurent connection
0 message(s) send by client
1 worker(s)
WS server : socket.io

#### steps report ####
┌────┬────── ┬───  ┬───────┐
│ Number │ Connections │ Errors │ Duration(ms) │
├────┼────── ┼────┼───────┤
│ 500    │ 500         │ 0      │ 1787         │
├────┼── ────┼────┼───────┤
│ 1000   │ 500         │ 0      │ 2609         │
├────┼── ────┼────┼───────┤
│ 1500   │ 0           │ 500    │ 2610         │
├────┼───── ─┼────┼───────┤
│ 2000   │ 13          │ 487    │ 1609         │
├────┼ ──────┼────┼───────┤
│ 2500   │ 0           │ 500    │ 1114         │
├────┼──── ──┼────┼───────┤
│ 3000   │ 0           │ 500    │ 1135         │
├────┼─ ─────┼────┼───────┤
│ 3500   │ 0           │ 500    │ 634          │
├────┼──── ──┼────┼───────┤
│ 4000   │ 0           │ 500    │ 597          │
├────┼── ────┼────┼───────┤
│ 4500   │ 0           │ 500    │ 1119         │
├────┼─── ───┼────┼───────┤
│ 5000   │ 0           │ 500    │ 618          │
└────┴──── ──┴────┴───────┘
#### total report ####
┌────┬────── ┬────┬───────┬───────┬───────┐
│ Number │ Connections │ Errors │ Message Send │ Message Fail │ Duration(ms) │
├────┼──── ──┼────┼───────┼───────┼───────┤
│ 5000   │ 1013        │ 3987   │ 0            │ 0            │ 9627         │
└────┴─── ───┴────┴───────┴───────┴───────┘

 为什么会是1000多点这个数?websocket-bench 的README.md文档也特别提醒:

Tip: You may find it useful to increase the maximum number of open file descriptors on your system during testing:

ulimit -n 60000

 ulimit 有什么特殊作用?网上搜到这篇文章 通过ulimit改善系统性能 ,原来是系统默认的文件打开数影响了连接数 ,通过命令 ulimit -a 可以看到:

core file size             (blocks, -c) 0
data seg size              (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size                    (blocks, -f) unlimited
pending signals                  (-i) 31107
max locked memory          (kbytes, -l) 64
max memory size            (kbytes, -m) unlimited
open files                   (-n) 1024
pipe size                    (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                   (kbytes, -s) 8192
cpu time                     (seconds, -t) unlimited
max user processes              (-u) 31107
virtual memory               (kbytes, -v) unlimited
file locks                     (-x) unlimited

  open files 为 1024 大概明白为什么socket连接只能有1000多点,使用 ulimit -n 60000来调整可打开文件数,再进行测试,连接数果然就正常了

 

题外话:socket长连接保持着“文件”(Linux上一切都可以看成是文件)被打开,所以1024的文件连接数很快被耗尽,虽然websocket-bench 文档中也提到ulimit -n 参数调整,但是对操作系统性能类的参数了解很少,没明白什么意思,就无视了,等发现问题的时候,猜可能是该参数影响了性能,才去查资料,所以说专业的事情还真得专业的人来解决,主机工程师或者性能测试人员对这类的参数也许就比较熟悉,知道该类参数的调整,程序员碰到可能真得一头雾水,现在明白为什么高校的计算机专业需要开设操作系统的课程了,这才是基础,虽然学的也是一头雾水^_^

 

分享到:
评论
1 楼 chinadeng 2016-02-28  
websocket-bench  如何安装 ?根据github 的命令一直不成功

相关推荐

    socket.io,socket.io-client下载

    1. **服务器端设置**:在Node.js项目中,导入`socket.io`模块,初始化服务器并监听特定端口,然后使用`io.on('connection', (socket) => {})`来处理新连接和事件。 2. **客户端连接**:在Java或Android应用中,导入...

    vue+node(socket.io)+webRTC一对一视频通讯demo

    4. **socket.js** 或类似的文件 - 用于初始化socket.io连接,处理信令消息的发送和接收。 5. **util** 文件夹 - 可能包含了一些工具函数,如处理WebRTC API的辅助方法。 项目的实现流程大致如下: 1. 用户打开应用...

    weapp.socket.io

    1. **初始化连接**:在微信小程序中启动Socket.IO连接,通常需要指定服务器地址和端口,以及可能的连接参数。 2. **事件监听与发送**:提供发送和接收数据的接口,如`emit`用于发送事件,`on`用于监听事件。这使得...

    socket.io.js下载

    2. **连接**:创建一个Socket.IO客户端实例,并指定服务器地址。例如: ```javascript const socket = io('http://localhost:3000'); ``` 3. **事件监听**:Socket.IO提供了丰富的事件机制,如`connect`、`...

    weapp.socket.io.js.zip

    Socket.IO 是一个流行的实时应用程序框架,它提供了一种简单的方式来处理浏览器和服务器之间的双向通信。然而,微信小程序并不直接支持原生的Socket.IO库,因为它的运行环境与常规的Web环境有所不同。因此,我们需要...

    swift-socket.io-client-swiftSocket.IO客户端

    2. **连接管理**:Swift Socket.IO客户端负责建立和维护与服务器的连接。它会自动处理网络波动,包括重连策略,确保在各种网络环境下都能保持连接。 3. **传输协议**:为了保证跨平台兼容性和在网络条件差的情况下...

    Socket.IO.min.js

    在客户端,使用 Socket.IO.min.js 可以轻松地建立 WebSocket 连接,并进行实时数据传输。 应用场景: Socket.IO 在以下场景中特别有用: 实时通信应用程序: 如聊天应用、在线游戏、协作工具等,需要即时更新和...

    基于socket.io聊天室功能

    基于 WebSocket 协议,Socket.IO 提供了更高级别的接口,能够处理各种网络条件下的连接问题,确保数据的可靠传输。在这个“基于socket.io聊天室功能”的项目中,我们将探讨如何使用 Socket.IO 构建一个简单的聊天室...

    Vue-Socket.io, vuejs的socket.io 实现.zip

    Vue-Socket.io, vuejs的socket.io 实现 Vue-Socket.io Vuejs 2和Vuex的socket.io 实现安装npm install vue-socket.io --save用法配置从URL字符串自动连接import V

    session.socket.io, 在 socket.io 中,表示/连接会话.zip

    session.socket.io, 在 socket.io 中,表示/连接会话 session.socket.io ( SessionSockets ) 这个小模块简化了 socket.io 使用express或者连接中间件的http会话的使用。 它没有依赖项,可以使用任何与表示或者连接...

    微信小程序socket.io客户端, 支持微信小程序、支付宝小程序socket.io-mp-client-master.zip

    这个名为"socket.io-mp-client-master.zip"的压缩包包含了专门为微信小程序和支付宝小程序设计的Socket.IO客户端库,名为"socket.io-mp-client"。 1. **WebSocket协议**:Socket.IO基于WebSocket协议,WebSocket是...

    小程序socket.io客户端, 支持微信小程序、支付宝小程序.zip

    对于支付宝小程序,集成socket.io的过程基本类似,但需要注意的是,支付宝小程序的API有所不同,如使用`my.socketOpen`来建立连接,`my.socketSend`来发送数据,以及`my.socketClose`关闭连接等。 在实际开发中,你...

    express4.9+socket.io1.2+angular1.3聊天室

    `socket.io.js`通常包含客户端的Socket.IO连接代码,而服务器端则在Express中通过`require('socket.io')`引入并配置。 **AngularJS 1.3**: AngularJS是Google维护的一个前端MVC框架,它极大地简化了单页应用(SPA)...

    使用JS+socket.io+WebRTC+nodejs+express搭建一个简易版远程视频聊天

    在这里,Node.js与Express框架结合,创建了一个轻量级的服务器,处理HTTP请求,管理socket.io连接,并协调视频流的传输。Express提供了简洁的路由和中间件系统,使得构建RESTful API变得容易。 在项目结构中,...

    用java写socket.io客户端所需jar包

    3. **基本使用**:一旦你有了所需的jar包,就可以在Java代码中创建Socket.IO客户端实例,连接到服务器。通常,这涉及到以下步骤: - 导入必要的库:`import io.socket.client.IO; import io.socket.client.Socket;`...

    socket.io API文档

    ### Socket.IO API 文档知识点详解 #### 一、Socket.IO简介 Socket.IO 是一个非常流行的JavaScript库,它能够实现浏览器与服务器之间的实时双向通信。它不仅支持WebSocket协议,还能够通过其他方式(如轮询)作为回...

    Android客户端socket.io官方Demo完整可运行版

    2. **连接与断开**:Socket.IO 提供了连接(connect)和断开(disconnect)方法,用于建立和结束与服务器的连接。连接过程可能需要处理网络状态变化和重试策略。 3. **事件监听**:Socket.IO 支持多种事件,如...

    socket.io iOS Demo(含cookie及query参数配置)

    关于cookie的配置,socket.io客户端允许你在连接时发送cookies。在连接之前,你可以设置`socket.options.headers`,如下所示: ```swift socket.options.headers = ["Cookie": "your-cookie-value"] ``` 这将在...

    Socket.IO demo程序

    然后,我们可以在代码中导入`io.socket:socket.io-client`包,初始化Socket.IO客户端,并连接到服务器。 以下是一个简单的Socket.IO Java客户端示例: ```java import io.socket.client.IO; import io.socket....

    nodeJS+socket.io做一个简单的聊天室

    为了实现聊天功能,我们需要监听Socket.IO的连接和消息事件。当用户连接到服务器时,我们可以将其添加到一个名为`users`的数组中。收到新的消息时,将消息广播给所有连接的用户: ```javascript let users = []; ...

Global site tag (gtag.js) - Google Analytics