websocket 70K连接测试
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内存方面的设置,仅仅只是调整了分配给虚拟机的内存
websocket 70K连接测试的更多相关文章
- websocket 连接测试端口服务是否正常代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 使用四种框架分别实现百万websocket常连接的服务器
著名的 C10K 问题提出的时候, 正是 2001 年.这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的**,单机1万还是一个非常值 ...
- 实现单台测试机6万websocket长连接
本文由作者郑银燕授权网易云社区发布. 本文是我在测试过程中的记录,实现了单台测试机发起最大的websocket长连接数.在一台测试机上,连接到一个远程服务时的本地端口是有限的.根据TCP/IP协议,由 ...
- 使用四种框架分别实现百万websocket常连接的服务器--转
原文地址:http://colobu.com/2015/05/22/implement-C1000K-servers-by-spray-netty-undertow-and-node-js/#Nett ...
- Spring+Stomp+ActiveMq实现websocket长连接
stomp.js+spring+sockjs+activemq实现websocket长连接,使用java配置. pom.xml(只列出除了spring基本依赖意外的依赖,spring-version为 ...
- 雨露均沾的OkHttp—WebSocket长连接的使用&源码解析
前言 最近老板又来新需求了,要做一个物联网相关的app,其中有个需求是客户端需要收发服务器不定期发出的消息. 内心OS:
- Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试
Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...
- 【Centos】Postgresql连接测试(Perl和Ruby)
Centos安装了PostgreSQL之后,将考虑如何让Perl与Ruby连接它. Perl连接方式 1,安装Perl的数据库连接包 perl-DBD-Pg perl-DBI yum install ...
- 当web应用包含了websocket长连接,如何在web应用前加一层nginx转发
1 通过在web应用的前面加一层nginx ,可以实现一台主机部署多个应用,每个应用都可以用不同的域名去访问,并且端口都是80 2 nignx 转发websocket长连接 1 每个web应用,他们运 ...
随机推荐
- svn怎么切换用户
在使用svn客户端经常会保存用户及密码,方便下次直接登录,有时需要使用别的账号登录,这时该怎么切换呢? 工具/原料 苹果6 小米4 方法/步骤 在使用svn更新或提交数据时需要输入用户名和密码,在 ...
- iOS 输入限制之 InputKit
前言 最近接手了两个 O2O 的老项目,其中的 Bug 也不言而喻,单看项目中的布局就有 n 种不同的方式,有用纯代码的,有用 Masonry 的,有用 VFL 的,也有用 Xib 的,更有用代码约束 ...
- Kanzi 倒影效果制作
在kanzi中,倒影效果会经常用到,比如多媒体中. 先来看一下最终的实现效果: 在这个效果中,我们的需求是,倒影图与原图一致,透明度和可见范围可以调节. 下面说一下实现的步骤: 1.创建工程后,Roo ...
- Maven pom.xml配置详解
POM的全称是“ProjectObjectModel(项目对象模型)”. 声明规范 <projectxmlns="http://maven.apache.org/POM/4.0.0&q ...
- [图形学] 习题8.12 NLN二维线段裁剪算法实现
Nicholl-Lee-Nicholl二维线段裁剪算法相对于Cohen-Sutherland和Liang-Barsky算法来说,在求交点之前进行了线段端点相对于几个区域的判断,可以确切的知道要求交点的 ...
- MD5加盐 Java加密算法
MD5带盐值的java加密算法 import java.security.MessageDigest; public class PasswordEncoder { private final s ...
- Sql 2008R2 windows身份好用 ,sa身份不好用
Sql server2008r2 安装完毕以后 windows身份验证好用,sa身份不好用,解决方法步骤如下: 1.首先用windows身份登录 2.SQL实例右键属性 3.安全性这一项 4.选择wi ...
- jquery.jconfirm兼容IE6
因目标用户还在大量使用IE6(想吐CAO),只能做向下兼容,但之前使用的这个插件在IE6上并不支持.所以做了些处理才行. 以下为解决方法: IE6不支持position: fixed,所以需要对CSS ...
- HTTP消息中Header头部信息整理
1.HTTP请求方式 GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEAD 检查一个对象是否存在 ...
- 或许你不知道的10条SQL技巧(转自58沈剑原创)
这几天在写索引,想到一些有意思的TIPS,希望大家有收获. 一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and s ...