Sheeps_linux_v5.0 发布,游戏服务器全链路压力测试框架

栏目: 软件资讯 · 发布时间: 3年前

内容简介:Sheeps Sheeps_linux_v5.0 已经发布,此版本更新内容包括: 完成linux移植,编译并执行示例项目:make && make install && cd out/bin/ && ./example Sheeps是游戏服务器全链路压力测试框架,适用于TCP和UDP通讯的...

Sheeps Sheeps_linux_v5.0 已经发布,此版本更新内容包括:

  • 完成 linux 移植,编译并执行示例项目:make && make install && cd out/bin/ && ./example

Sheeps是游戏服务器全链路压力测试框架,适用于TCP和UDP通讯的服务,基于应用层数据包的录制和回放,支持分布式部署。

关于Sheeps

此系统是通用于TCP和UDP服务器的压力测试框架,基于数据包的录制和回放,集成时间控制、快进、暂停功能,初始是为了完成对游戏服务器的压力测试,探知游戏服务器所能承载的最大在线人数,经历多次迭代,最终演化成型,并命名为Sheeps(羊群)。

架构图示

Sheeps_linux_v5.0 发布,游戏服务器全链路压力测试框架

工作原理

本系统采用协议录制、回放的方式进行压力测试。分为控制端和负载端,控制端负责录制、回放及消息分发,负载端完成项目接入后,接收控制端命令及消息,建立大量连接至目标服务器,作为压力发起端,并支持分布式部署。此过程中负载端通过调用项目接入层,对网络封包进行解析、修改、再打包发送至服务器,实现压测每个压测用户的差异化处理。

并发设计

本系统使用自有的一套基于windows IOCP实现的多线程Proactory网络模型,在尽可能获得高并发的同时,简化业务逻辑的开发难度。因此使用者应该了解两个概念HSOCKET、ReplayProtocol,HSOCKET为连接句柄,表示一个网络连接。ReplayProtocol为业务逻辑处理基类,在本系统中表示一个压测用户,每一个网络事件的产生,都会调用对应ReplayProtocol对象中的成员函数进行处理。每个连接都绑定一个ReplayProtocol对象,同时多个连接可以绑定到同一个对象,以应对单个用户在业务处理中需要连接多个服务,同时又不增加业务处理的难度。本系统现已支持在linux下运行,linux下采用epoll实现,同时保持API与windows下保持一致

录制设计:

本系统内置了一个简单的SOCKS5代理服务器,只要将需要录制的目标客户端程序通过代理连接到网络,SOCKS5服务器就会将网络事件保存到文件中,网络事件类型包括连接、关闭和发送,每个事件都有对应的目标IP地址和端口号,发送事件会有相应的数据包,比较麻烦的是使用者需要自己寻找合适SOCKS5代理客户端,作者亲测安卓系统可以使用“代理机器人”(ProxyDroid,需要root),windows系统下可以使用ProxyCap,它支持代理UDP代理,不过它并不是免费的。

回放设计

本系统的核心工作原理是基于录制与回放模式,采用类似播放音视频的设计,每个压测用户拥有自身的时间轴,并且在时间轴的基础上添加了播放状态的控制,比如播放、暂停、快进,默认情况下,用户处于播放状态,使用者根据业务需要随时变更用户状态,实现自身状态和服务器状态的同步。任务工作线程会循环调用ReplayProtocol对象成员函数,用户需要在此处理不同的回放事件,建立连接、发送消息,关闭连接等。

如何接入项目?

1.请查看项目示例:example,该项目中每个函数均有备注其作用说明
2.使用者需要着重理解ReplayProtocol每个成员函数的作用,每个接入的项目都需要实现一个继承ReplayProtocol的子类
3.使用者必须编写四个回调函数,并且理解其作用,它们将作为启动压测框架的必须参数
此项目为Visual Studio 2019创建,使用C++开发,目前本框架只提供64位的二进制程序下载,所以您的程序需要编译为64位程序,如需使用32位,请自行克隆源码并编译。

接入项目需要掌握哪些API?

Task_API void		TaskManagerRun(int projectid, CREATEAPI create, DESTORYAPI destory, INIT taskstart, INIT taskstop);
Task_API bool		TaskUserDead(ReplayProtocol* proto, const char* fmt, ...);
Task_API bool		TaskUserSocketClose(HSOCKET hsock);
Task_API void		TaskUserLog(ReplayProtocol* proto, uint8_t level, const char* fmt, ...);
Task_API void		TaskLog(HTASKCFG task, uint8_t level, const char* fmt, ...);
#define		TaskUserSocketConnet(ip, port, proto, iotype)	IOCPConnectEx(ip, port, proto, iotype)
#define		TaskUserSocketSend(hsock, data, len)			IOCPPostSendEx(hsock, data, len)
#define		TaskUserSocketSkipBuf(hsock, len)				IOCPSkipHsocketBuf(hsock, len)  

以上是完成项目接入所必须了解的API函数,头文件 TaskManager.h;

TaskManagerRun:启动负载端必须调用,需要传入项目id及四个回调函数,分别为创建用户(ReplayProtocol对象)、销毁用户、任务开始、任务结束;
TaskUserDead:用于向Task Manager报告用户自毁,Task Manager会将其从队列中移除;
TaskUserSocketConnet,TaskUserSocketSend,TaskUserSocketClose:分别用于用户发起连接、发送消息、关闭连接等网络操作,其中连接为异步连接, IO Manger在连接成功或者失败后会通知用户,IO Manager会调用用户成员函数ConnectionMade或者ConnectionFailed;但是通过调用TaskUserSocketClose关闭连接时,网络连接会立即关闭,IO Manager不会再通知连接关闭事件
TaskUserSocketSkipBuf:需要从socket缓冲区中跳过的消息长度,用户已经处理过得网络消息需要调用此函数
TaskUserLog,TaskLog:均用于输出日志,不同的是一个传递参数用户类指针,一个传递任务结构指针,TaskUserLog输出时会携带用户序号,用于区分不同用户的日志流

使用说明

如何使用?
Sheeps_linux_v5.0 发布,游戏服务器全链路压力测试框架

完成了项目接入,如何进行压力测试呢?总共分为两步;一,录制;二,回放。

一、录制

1.启动控制端程序,程序会自动启动socks5代理服务,端口为1080;
2.启动需要录制网络消息的项目客户端,并设置为通过代理连接(Android系统推荐使用ProxyDroid,windows系统推荐使用proxifer),连接IP为控制端运行机器的IP地址,端口为1080,代理类型为socks5,确认代理设置完成后,关闭需要录制的项目客户端程序,准备工作就绪。
3.本机访问http://127.0.0.1:1080/,在录制管理点击“开启”按钮,此时按钮文字变为“关闭”
4.启动需要录制的项目客户端,进行正常的使用操作,需要录制的操作都完成后,关闭该项目客户端,
5.在控制端程序窗口点击“关闭录制”,请注意按钮旁的剩余数字,显示0说明所有消息均已保存入库,目标文件data.db
6.点击“展开数据表”查看录制的所有网络连接,确认所需要录制的网络连接存在列表中

二、回放

1.本机访问http://127.0.0.1:1080/,点击任务管理
2.填写任务配置信息,需要压测用户的总数,单次数量,时间间隔,选择需要回放的文件,以及连接,循环模式可以选择循环或者不循环,如果不希望用户因为意外错误而自毁,可以勾选“忽略错误”
3.配置完成后,点击“添加任务”,此时在“任务列表”中可以刚刚配置的回放任务
4.确定负载端启动运行,并连接成功
5.在任务列表中点击开始,压测开始进行,可以在日志目录中查看压测过程是否正常
6.如要停止回放,在任务列表中点击停止即可

代码引用说明

1.本系统使用了开源的cjson库:https://sourceforge.net/projects/cjson/
2.本系统使用了开源的 SQLiteC语言 库:https://www.sqlite.org/index.html
3.本系统使用以前项目积累的sha1和md5算法源码,时间久远已记不清出处
4.感谢以上开源代码或项目,如有侵犯版权,请与我联系

下载二进制文件

点击此处进入下载

详情查看:https://gitee.com/lutianming/Sheeps/releases/Sheeps_linux_v5.0


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Parsing Techniques

Parsing Techniques

Dick Grune、Ceriel J.H. Jacobs / Springer / 2010-2-12 / USD 109.00

This second edition of Grune and Jacobs' brilliant work presents new developments and discoveries that have been made in the field. Parsing, also referred to as syntax analysis, has been and continues......一起来看看 《Parsing Techniques》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具