首页 技术 正文
技术 2022年11月19日
0 收藏 456 点赞 4,075 浏览 1762 个字

websocket 70K连接测试


最近使用socket.io做了一个实时应用,实时性、稳定性还是很让人满意的。如果拿socket.io来做小型应用,综合效率应该是最高的。但是网上少有socket.io做大量连接测试的案例,这是比较让人担心的一点,socket.io是否适合做具有大量连接场景的需求呢?Trello其实就是用socket.io来处理实时通信的,而且trello目前已经有数百万的用户了,所以从这点看,socket.io的规模应用应该还是可行了。

为了以防万一,我想拿websocket(([https://github.com/websockets/ws][1])) 做后备应用,并且找到了国外网友的测试代码,我稍微改了下,代码比较简单,自己写一份也可以,但对于了解一台普通的PC能够支撑的连接数量,已经够了。测试的结果也比较满意,以后可以放心用websocket来做应用了。

测试的内容包括:

  • win7测试
  • win7修改PC最大连接数
  • ubuntu14.04测试
  • ubuntu14.04修改最大连接数

1. 代码说明

服务端代码功能:
  • 接收连接,连接到来时计数器加1
  • 连接断开时,计数器减1
  • 在定时器中打印系统资源占用状态
客户端代码功能:
  • 循环建立10K(或20K)连接【建议10K,数量过大时,成功连接的数量可能会比较小,所以小批量,多个实例】
  • 连接建立时,将连接压入数组
  • 连接断开时,将连接移出数组
  • 在定时器中打印连接数量
  • 每个连接建立时,发送一定的消息到server【如果消息发送量过大,注意修改server的接收缓冲区大小
  • 建立client代码的副本,方便修改连接数。【不管是windows还是linux环境,建议使用多个client副本,以方便调整连接数

2. win7测试

在win7中测试时,如果不修改win7的注册表连接限制,server只能接收13K左右的连接,再继续建立连接时,就会报event.js的错误

3. win7修改PC最大连接数

步骤:

  • 打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters,
  • 新建一个名为MaxUserPort的键,设置其值为65534
  • 再新建一个名为TcpTimedWaitDelay的键,设置其值为50

保存,然后重新运行client连接,可以发现已经可以突破默认的限制了。我只加到了30K连接,没有再继续加多。【在linux服务测试中,需要win7有足够的连接。】

注意:如果注册表中找不到需要的键值,自己新建

4. ubuntu14.04测试

测试条件:

  • 我的ubuntu14.04运行在visualBox中,最开始分配的内存是2G。
  • 我一开始就修改了ubuntu的file限制,将上限改成了500,000
  • 直接把win7下的测试代码拷贝到linux中运行,开启多个client实例。

测试现象:

  • 当建立大约4oK连接时,连接数停留在这里了。查看linux file数量,发现已经到500000,再次修改file限制,改为1,000,000
  • 在ubuntu中启动的连接数达到45K左右时,继续在ubuntu中开启client实例,不能够继续建立连接了。(此时开始在win7中建立到ubunut的连接)
  • 在win7中开启client连接,当建立连接数达到55K左右时,server总是被linux Killed。此时,我关闭了虚拟机,调整虚拟机的分配内存为3GB,再次开始测试。
  • 继续在win7中开启client,我一共开启了3个实例,共30K连接。ubuntu中开启了4个实例(20K一个,10K3个,只能保持45K左右的连接),ubuntu内存占用大概1.2GB,此时建立的连接数达到了75K。

    5. ubuntu14.04修改最大连接数

    步骤

  • 配置 /etc/security/limits.conf,文件尾追加

    • hard nofile 1000000
    • soft nofile 1000000
  • 编辑/etc/pam.d/common-session

    加入一行

    session required pam_limits.so

  • 编辑/etc/profile,加入

    ulimit -SHn 51200

注意:我没有调整linux内存方面的设置,仅仅只是调整了分配给虚拟机的内存

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,104
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,581
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,428
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,200
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,835
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,918