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应用,他们运 ...
随机推荐
- 一起学习c++11——c++11中的新语法
c++11新语法1: auto关键字 c++11 添加的最有用的一个特性应该就是auto关键字. 不知道大家有没有写过这样的代码: std::map<std::string, std::vect ...
- 【Android Developers Training】 1. 创建一个Android项目工程
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- 巧用五招提升Discuz!X运行速度
Discuz!X使用的是数据库应用程序,所以,当数据库的大小.帖子的数目.会员的数目,这些因素都会影响到程序的检索速度,尤其是当论坛的影响力大了,这个问题就更为突出了,虽然,康盛对Discuz进行了更 ...
- 基于HTTP协议的下载功能实现
超文本传输协议 (HTTP-HyperText Transfer Protocol)是一种使用极为广泛的协议,它由请求和响应构成,是一种无状态的应用层协议.设计HTTP协议的初衷是为了提供一种传输HT ...
- 读书共享 Primer Plus C-part 7
第十章 数组和指针 1.关于二维数组跟指针 #include<stdio.h> int main() { ][]={{,,,},{,,,},{,,,}}; ; ;i< ;i++) ...
- python简单实现websocket
协议选择的是新的Hybi-10,参考文章如下: http://www.cnblogs.com/zhuweisky/p/3930780.html http://blog.mycolorway.com/2 ...
- Java基础语法<三> 输入输出
1. 读取输入 Scanner in = new Scanner(System.in); 输入一行(包含空格) String str = in.nextLine() 读取一个单词(以空白符作为 ...
- POJ 2152 fire / SCU 2977 fire(树型动态规划)
POJ 2152 fire / SCU 2977 fire(树型动态规划) Description Country Z has N cities, which are numbered from 1 ...
- 基于layUI实现前端分页功能
一.layUI介绍 Layui 是一款采用自身模块规范编写的国产前端UI框架,遵循原生HTML/CSS/JS的书写与组织形式,门槛极低,拿来即用.内置了一些常用元素和组件的UI框架. 下载地址为htt ...
- 以Random Forests和AdaBoost为例介绍下bagging和boosting方法
我们学过决策树.朴素贝叶斯.SVM.K近邻等分类器算法,他们各有优缺点:自然的,我们可以将这些分类器组合起来成为一个性能更好的分类器,这种组合结果被称为 集成方法 (ensemble method)或 ...