websocket服务器测试
代码地址:github.com/buexplain/netsvr
netsvr网关进程,是websocket服务器business业务进程,是模拟业务逻辑的stress压测进程,是模拟客户端的
程序部署如下:

说明
- websocket服务器,一台,只运行
netsvr网关进程。 - business服务器,两台,每台运行一个
business业务进程和一个stress压测进程 - stress服务器,一台,运行两个
stress压测进程
也就是说,压测进程有四个,运行在三台机器上。
websocket机器情况
cpu

内存

网络

top信息

压测中netsvr进程情况

说明
- websocket服务器有10013个websocket连接,7621个websocket连接已经登录。
- websocket服务器有47384个主题(相当于群聊的群),每个群的人数不知道。
- websocket消息转发到business进程的次数统计

- websocket消息转发到business进程的字节数统计

结论

消息条数、字节数都是对的,但是每条消息的平均大小不是指websocket客户端发送到websocket服务器的消息的大小,具体含义看代码:
//编码数据成business需要的格式
tf := objPool.Transfer.Get()
tf.UniqId = uniqId //websocket连接的唯一id
tf.CustomerId = customerId //websocket连接登录后的用户id
tf.Session = customerSession //websocket连接登录后的session数据
tf.Topics = topics //websocket连接订阅的主题(可以理解为加入的群id集合)
tf.Data = data //这个才是websocket客户端发到websocket服务端的消息
defer objPool.Transfer.Put(tf)
//转发数据到business
if sendSize := currentWorker.Send(tf, netsvrProtocol.Cmd_Transfer); sendSize > 0 {
//统计转发到business的次数与字节数
metrics.Registry[metrics.ItemCustomerTransferCount].Meter.Mark(1)
//平均11.9KB指的是这个,包了除开tf.data外的其它数据
metrics.Registry[metrics.ItemCustomerTransferByte].Meter.Mark(int64(sendSize))
}
压测结束后netsvr进程情况


本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
推荐文章: