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

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 对网络游戏服务器进行性能压测时,压测工具一般是模拟大量客户端连接服务器进行协议接口请求并发来压测服务器,因此就需要具有高并发的网络模块支持。本篇主要介绍我所了解的网络相关的知识。 当调用一个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系统支持,因此可以根据具体需求进行选择。


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

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2月前
|
运维 Prometheus 监控
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
如何在测试环境中保持操作系统、浏览器版本和服务器配置的稳定性和一致性?
|
3天前
|
数据采集 人工智能 自然语言处理
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
FireCrawl 是一款开源的 AI 网络爬虫工具,专为处理动态网页内容、自动爬取网站及子页面而设计,支持多种数据提取和输出格式。
47 18
FireCrawl:开源 AI 网络爬虫工具,自动爬取网站及子页面内容,预处理为结构化数据
|
11天前
|
存储 安全 物联网
浅析Kismet:无线网络监测与分析工具
Kismet是一款开源的无线网络监测和入侵检测系统(IDS),支持Wi-Fi、Bluetooth、ZigBee等协议,具备被动监听、实时数据分析、地理定位等功能。广泛应用于安全审计、网络优化和频谱管理。本文介绍其安装配置、基本操作及高级应用技巧,帮助用户掌握这一强大的无线网络安全工具。
42 9
浅析Kismet:无线网络监测与分析工具
|
2月前
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
74 32
|
2月前
|
安全 网络安全 数据安全/隐私保护
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。
访问控制列表(ACL)是网络安全管理的重要工具,用于定义和管理网络资源的访问权限。ACL 可应用于路由器、防火墙等设备,通过设定规则控制访问。其类型包括标准、扩展、基于时间和基于用户的ACL,广泛用于企业网络和互联网安全中,以增强安全性、实现精细管理和灵活调整。然而,ACL 也存在管理复杂和可能影响性能的局限性。未来,ACL 将趋向智能化和自动化,与其他安全技术结合,提供更全面的安全保障。
122 4
|
2月前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
46 4
|
2月前
|
存储 网络协议 定位技术
OSPF路由汇总:优化网络的强大工具
OSPF路由汇总:优化网络的强大工具
68 1
|
2月前
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
41 1
|
2月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
175 5
|
2月前
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
185 1

热门文章

最新文章