websocket服务器测试

AI摘要
【知识分享】本文介绍了一个基于netsvr网关的WebSocket服务器性能压测部署方案,包括网关、业务逻辑和压测客户端的进程分布与机器配置,并提供了压测过程中的连接数、主题数及消息转发统计数据,最后通过代码片段解释了监控指标中“平均消息大小”的计算方式(包含协议头等元数据)。

代码地址:github.com/buexplain/netsvr

  • netsvr网关进程,是websocket服务器
  • business业务进程,是模拟业务逻辑的
  • stress压测进程,是模拟客户端的

程序部署如下:

机器

说明

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

websocket机器情况

cpu

cpu

内存

内存

网络

网络

top信息

top

压测中netsvr进程情况

business进程提供的监控数据

说明

  • websocket服务器有10013个websocket连接,7621个websocket连接已经登录。
  • websocket服务器有47384个主题(相当于群聊的群),每个群的人数不知道。
  • websocket消息转发到business进程的次数统计
    websocket消息转发到business进程的次数统计
  • 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进程情况

压测结束后netsvr进程情况
压测总结

本作品采用《CC 协议》,转载必须注明作者和本文链接
梦想星辰大海
讨论数量: 20

websocket 怎么压测

2年前 评论
梦想星辰大海 (楼主) 2年前

可以在生产环境使用该项目吗?

2年前 评论
梦想星辰大海 (楼主) 2年前
kureCC (作者) 2年前
梦想星辰大海 (楼主) 2年前
kureCC (作者) 2年前
梦想星辰大海 (楼主) 2年前

我比较好奇,怎么快速给一万客户端发消息

2年前 评论
梦想星辰大海 (楼主) 2年前
kureCC 2年前
梦想星辰大海 (楼主) 2年前
kureCC 2年前
梦想星辰大海 (楼主) 2年前
kureCC 2年前
lxzan 2年前

我们生产有个场景,客户会导入excel我们作为任务来处理,但是处理的时间会有一点长,目前是通过轮询来查看任务,请问可以用你的项目吗?我的想法是完成任务以后发个消息后续通过websocket来告诉前端。

2年前 评论
梦想星辰大海 (楼主) 2年前

大佬 请教下有什么比较简单的方式吗 是可以引入现成的包吗

2年前 评论
梦想星辰大海 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!