【游戏】服务器性能测试(六) 简单压测工具之高并发网络篇

简介: 对网络游戏服务器进行性能压测时,压测工具一般是模拟大量客户端连接服务器进行协议接口请求并发来压测服务器,因此就需要具有高并发的网络模块支持。本篇主要介绍我所了解的网络相关的知识。 当调用一个IO函数例如下面的recv函数,程序会进入阻塞,等待数据准备好,如果数据没有准备好将一直阻塞在recv处,直到有数据从系统内核拷贝到用户空间(即同步IO),然后IO函数返回读取的数据。还有recvfrom、send、sendto、accept、connect也是同理。

【游戏】服务器性能测试(六) 简单压测工具之高并发网络篇


目录


【游戏】服务器性能测试(一)阈值


【游戏】服务器性能测试(二)容灾


【游戏】服务器性能测试(三) 性能指标


【游戏】服务器性能测试(四) 简单压测工具理论篇


【游戏】服务器性能测试(五) 网络协议包序列化


一、前言


   对网络游戏服务器进行性能压测时,压测工具一般是模拟大量客户端连接服务器进行协议接口请求并发来压测服务器,因此就需要具有高并发的网络模块支持。本篇主要介绍我所了解的网络相关的知识。


二、阻塞BIO,非阻塞NIO,异步AIO


   1. 阻塞I/O模型+同步IO 简称BIO


       当调用一个IO函数例如下面的recv函数,程序会进入阻塞,等待数据准备好,如果数据没有准备好将一直阻塞在recv处,直到有数据从系统内核拷贝到用户空间(即同步IO),然后IO函数返回读取的数据。还有recvfromsendsendtoacceptconnect也是同理。


# python 代码
sock = socket.socket()
sock.connect(address)
sock.recv(1024)


      如果创建多个socket后,对每一个socket做轮询recv,其中一个socket没有数据进入阻塞,同时会导致其他的socket也被阻塞,无法读取数据如下代码展示。


# python 代码
for sock in socklist:
  sock.recv(1024)    # 一旦某个socket没有数据,整个循环就阻塞了


   2. 非阻塞I/O模型+同步IO 简称NIO

       通过对socket进行设置为非阻塞模式,当调用IO函数时,如果数据未准备好时程序不是进入睡眠阻塞,而是立即返回一个错误码。这样就可以知道这个socket是否有数据可以读取。


sock = socket.socket()
sock.connect(address)
sock.setblocking(False) # 设置为非阻塞模式
sock.recv(1024)


   将socket设置为非阻塞模式,在没有数据的时候会立即返回,但拷贝数据依然是同步完成的,即需要等数据从内核拷贝到用户空间后才返回。相对于阻塞模式其优点比较明显,但是代码编写会稍微复杂一点,需要理解不同的返回错误码的具体意思。


for sock in socklist:
  try:
    # 有数据时需要等待数据拷贝完成,没有数据则立即返回
    sock.recv(1024) 
  except: #这里需要处理不同的异常
    pass


   3. I/O多路复用+同步IO


       使用select、poll、epoll同时对多个socket的I/O操作进行监听,只返回已准备就绪的socket,通过调用已准备就绪的IO操作就可以做到不阻塞整个程序。这里监听的socket可以是阻塞模式,也可以是非阻塞模式的,用非阻塞模式的会更好一些。


r_socks, w_socks, e_socks = select.select(socklist,[],[])
for sock in r_socks:
  sock.recv(1024)  # 进行相关的io函数操作


       select会遍历整个socket列表,从中找到准备就绪的socket对象,如果socket列表很大的话,遍历本身就会产生很大的开销。select可以在windows和Linux系统中使用,pollepoll则只能在Linux系统中使用。pollselect的机制差不多,epoll则是改进的poll


   4. 异步IO 简称AIO


       异步IO就是在调用IO函数后会立即返回,但不会立即得到结果,而真正的函数结果需要通过状态、通知和回调来通知调用者进行操作。windows下提供了IOCP异步IO技术,但在Linux系统下却没有这种技术。因此到目前为止大量的网络库都是采用的IO多路复用+非阻塞模式编写的。


三、总结


   1. IOCP完成端口


       IO完成端口是Wnidows系统提供的最复杂的内核对象,是一种解决并发IO请求的最佳模型,是用来实现高容量网路服务器的最佳方法。此技术仅在windows系统中才可以使用。如果是选择开发windows下的网络程序,可以考虑用IOCP来实现高并发的网络模块。如果是使用Java开发语言,可以用AIO模块,在windows下采用的是IOCP实现,但在Linux则是用epoll模拟的。


   2. IO多路复用


       IO多路复用在windows和Linux下都可以使用,可以使用都支持的select,但它的时间复杂度是O(n),而且有最大连接数限制。pollselect类似,但没有最大连接数限制,仅Linux下可以使用。epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,时间复杂度可以降至O(1)


   因此从目前来看,BIO不适合做高并发,NIO是比较通用的解决方案,AIO目前只有windows系统支持,因此可以根据具体需求进行选择。


欢迎微信搜索"游戏测试开发"关注一起沟通交流。

相关文章
|
13天前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
6月前
|
SQL 分布式计算 Serverless
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
鹰角网络为应对游戏业务高频活动带来的数据潮汐、资源弹性及稳定性需求,采用阿里云 EMR Serverless Spark 替代原有架构。迁移后实现研发效率提升,支持业务快速发展、计算效率提升,增强SLA保障,稳定性提升,降低运维成本,并支撑全球化数据架构部署。
559 56
鹰角网络:EMR Serverless Spark 在《明日方舟》游戏业务的应用
|
12天前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
138 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
19天前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
65 6
|
2月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
514 10
|
2月前
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
295 0
|
3月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
4月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
751 23
|
3月前
|
弹性计算 运维 Linux
3分钟幻兽帕鲁游戏链接服务器一键部署教程,基于阿里云服务器
本教程介绍如何使用阿里云服务器快速部署《幻兽帕鲁》联机服务,支持与好友联机游戏。内容包括服务器配置、计费说明、服务创建及登录游戏步骤,同时提供存档管理与配置修改方法,助您轻松搭建专属游戏服务器。

热门文章

最新文章