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


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

查看所有标签

猜你喜欢:

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

未来简史

未来简史

[以色列] 尤瓦尔·赫拉利 / 林俊宏 / 中信出版集团 / 2017-2 / 68.00元

进入21世纪后,曾经长期威胁人类生存、发展的瘟疫、饥荒和战争已经被攻克,智人面临着新的待办议题:永生不老、幸福快乐和成为具有“神性”的人类。在解决这些新问题的过程中,科学技术的发展将颠覆我们很多当下认为无需佐证的“常识”,比如人文主义所推崇的自由意志将面临严峻挑战,机器将会代替人类做出更明智的选择。 更重要的,当以大数据、人工智能为代表的科学技术发展的日益成熟,人类将面临着从进化到智人以来z......一起来看看 《未来简史》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具