WebSocket 的性能与压力测试

原文链接:http://chensd.com/2015-07/websocket-stress-test-and-performance-test.html?utm_source=tuicool&utm_medium=referral

官方链接:https://www.npmjs.com/package/websocket-bench

相对于短连接应用,长连接应用的测试要麻烦得多——尤其是性能和压力测试。此前,甚至从来没有给任何一个上线的 WebSocket 应用做过这方面的测试,前两天,看到有人在SegmentFault 上问这方面的问题,刚好又有空,于是想着,还是来查查这方面的资料吧。在 Github 上一搜,还真有现成的工具,名字很简单,直接就叫websocket-bench

websocket-bench 是个用 Node.js 编写的命令行工具,可以对使用 Socket.io、fayePrimusWAMP 编写的长连接应用进行性能和压力测试,用法和参数与 ab 差不多,多了一个指定连接成功后进行的操作的定义。

websocket-bench 安装

需要使用 npm 以全局的方式来安装 websocket-bench,当然要用阿里提供的]福利服务器,如下:

1
npm install -g websocket-bench --registry=http://registry.npm.taobao.org

基本使用

这里以在 CentOS 6.5 上进行测试为便进行说明。首先要修改一下文件打开数,默认是1024,修改为一个比较大的值就行,总共65535个端口,我们测试也不会用太大的并发,websocket-bench 推荐设置的是 60000 ,命令如下:

1
ulimit -n 60000

websocket-bench 的参数与 ab 基本一致,像这样

1
websocket-bench -a 300 -c 29 http://localhost:8100 -o opt.log

-a 参数用于指定总共的测试次数,-c参数指定并发连接数。我这里测试的是一个 Socket.io 的服务器,所以不需要使用-t参数指定类型,如果是其它的,则需要使用 engine.io faye primus wamp 进行指定。运行完成后,会打印报告,报告分两小部分,前一部分是以 -c 指定的数量组织的表格,后一部分是整个测试的统计,数据包括错误数和消耗时间。

使用-o参数可以将报告保存到单独的文件中。

使用 generator 来自定义测试逻辑

长连接压力测试麻烦的一部分,就在于连接完成后需要完成一定的交互操作,websocket-bench 通过 generator 文件来方便测试人员编写连接上服务器后所需要执行的操作。下面是我为了简单的测试一个2D地图移动游戏的简单测试文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
module.exports = {
  //可选,在建立连接之前会执行
  beforeConnect: function(client){
  },
  //必选,建立连接后所要做的事情
  onConnect: function(client, done){
    //向服务器发送消息
    //client 为客户端的连接实例
    client.emit('setTitle', {title: 'bench_' + randomNumber(), pVer: 2});
    //回调函数
    done();
  },
  //必选,向服务器民送消息时运行的代码
  sendMessage: function(client, done) {
    client.emit('moveTo', {x: randomNumber(3500), y: randomNumber(3500)});
    done();
  }
};


function randomNumber(max){
  return Math.floor(Math.random()* (max || 100000));
}

编写完成后,在运行 websocket-bench 时,使用 -g 参数指定 generator 文件即可。

另外,测试的时候,可以使用 iptraf 工具来看看带宽的占用情况。


CentOS系统下搭建websocket服务器非常简单,按照以下步骤进行即可。 1. 安装Node.js WebSocket服务器是基于Node.js实现的,因此需要先安装Node.js。使用如下命令进行安装: ``` sudo yum install epel-release sudo yum install nodejs ``` 2. 安装WebSocket模块 安装完Node.js之后,需要安装WebSocket模块。使用如下命令进行安装: ``` npm install ws ``` 3. 编写WebSocket服务器代码 使用Node.js编写WebSocket服务器代码,以下是一个简单的WebSocket服务器示例: ``` // 引入WebSocket模块 var WebSocket = require('ws'); // 创建WebSocket服务器 var server = new WebSocket.Server({ port: 8080 }); // 监听WebSocket连接事件 server.on('connection', function (socket) { console.log('WebSocket连接成功'); // 监听WebSocket消息事件 socket.on('message', function (message) { console.log('收到消息:' + message); // 向WebSocket客户端发送消息 socket.send('服务器发来的消息:' + message); }); // 监听WebSocket关闭事件 socket.on('close', function () { console.log('WebSocket连接关闭'); }); }); ``` 4. 启动WebSocket服务器 在终端中运行服务端代码,使用以下命令启动WebSocket服务器: ``` node server.js ``` 5. 测试WebSocket服务器 在浏览器中访问WebSocket服务器, 在客户端输入"ws://IP:PORT"即可连接到服务器。 以上就是CentOS系统下搭建WebSocket服务器的简单步骤。如果想使用HTTPS协议的WebSocket连接,需要在Nginx中进行反向代理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值