分布式Jmeter测试高性能UDP服务

分布式Jmeter测试高性能UDP服务,第1张

如下图

不过要注意以下几点

如下图:1个master(192.168.171.128) 2个slave(192.168.171.131 192.168.171.133) 这些都是虚拟机ip

Target是部署于同一个局域网中的UDP服务器(10.100.50.127)

下面我们来演示一下如何配置SSL

如果是在windows上,则执行bin/create-rmi-keystore.bat。执行完成后会生成一个文件rmi_keystore.jks。圣后这个文件后,保证每一个Jmeter宿主机上都使用的是这个文件

所有的宿主机都要安装Jmeter并配置环境变量

1.将Jmeter压缩包上传到所有的宿主机上。解压后的目录为/opt/software/jmeter/apache-jmeter-4.0

2.配置环境变量

配置好之后需要测试一下

如果提示没有权限,就把bin目录的文件加一下执行权限就好了

做好上面的两步后,slave只需要启动一下jmeter-server就可以了

也可以指定ip运行

UDP服务器,就是首发数据,进行数据处理的。与TCP不同的是不用建立连接,直接调用recvfrom来收包。

开始就是基本的socket初始化地址什么的。

要求多个线程处理客户端命令,那recvfrom收包后,考虑把客户端的地址信息保存,便于sendto,对接收的数据包,交给线程进行处理,每个线程可以向一块共享内存、队列里写入收到的数据和对应的客户端信息,每次写的时候对这块共享资源加锁,多个线程对共享资源读是加锁,读完解锁,并开始处理数据。

处理完,用sendto发回去。

不是什么大项目。小程序而已。

UDP2000个客户端左右 并发

单个数据包最大512字节

Internet 10MB带宽

要求效率(尽可能快,尽可能少丢包),这种情况下用哪种通讯模型比较有优势!

想用IOCP,因为和select模型相比,这个稍微熟悉一点,也在项目中用过,不过是TCP的。

有两个问题,大家懂得的帮忙给指导一下:

是否可以理解为UDP模式下,一次recvfrom 只对应一次sendto。

2.能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。

------解决方案--------------------------------------------------------

-------------------------------------

等不到,包被截断了。

2.能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。

--------------------------

其实,我个人认为对udp而言,不用iocp也可以满足。 首先sendto都是立即完成的,无需异步操作。而recvfrom可以只需阻塞一个线程就够了,不需要重叠操作。

------解决方案--------------------------------------------------------

用UDX协议最可靠,效率高,开发简单,非开源。

UDT开源,对于你这种2000客户,够用,开源。

------解决方案--------------------------------------------------------

1.sendto 10k,接受部分要么收到10k,要么全部丢失,不会出现部分收到的情况。

------解决方案--------------------------------------------------------

-------------------------------------

在局域网可以,公网,一般1K也收不到。

2.能否对服务端的套接字同时投递多个WsaRecvFrom,能否在多个线程中同时投递WsaSendTo和WsaRecvFrom。

--------------------------完全可以

------解决方案--------------------------------------------------------

1.如果UDP数据在传输过程中被分包,则你需要对数据包进行标识,已确保获取的包完整。一次recvfrom并不对应一次sendto,考虑UDP不可靠传输的因素。

2.不可以,因为sendto和recvfrom都是对同一个资源Socket进行操作。如果在多个线程中对同一个资源进行操作,如果不加锁的情况下,会非常可怕的。而且,如果你加锁了,其实还不如单线程操作。

按照你的需求最好还是采用UDP,不过可以考虑组播。

2.API调用完全没有问题。但是接到的数据可能和发送的数据次序不一样,这本身是UDP乱序特性决定了的。而且你发送方可能是多线程,从API层面来说,这些调用都是可以的,完全没有问题。但是给你接收方处理带来一系列问题。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/307886.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存