对UDP服务器进行基准测试

对UDP服务器进行基准测试,udp,benchmarking,Udp,Benchmarking,我正在将UDP侦听器从Java重构为C。它每秒需要处理1000到10000条UDP消息,平均数据长度约为60字节。没有必要答复。数据不能丢失(不要询问决定UDP的原因) 我分叉一个进程来处理传入的数据,这样我就可以尽快地从中接收数据,而不用填满内核缓冲区。然后,子对象处理接收到的数据 简而言之,我的算法是: 收听数据。 收到数据后,检查错误。 用叉子叉掉孩子。 如果我是孩子,请对数据执行我想执行的操作并退出。 如果我是家长,收获所有僵尸孩子waitpid(-1,NULL,WNOHANG) 重复一

我正在将UDP侦听器从Java重构为C。它每秒需要处理1000到10000条UDP消息,平均数据长度约为60字节。没有必要答复。数据不能丢失(不要询问决定UDP的原因)

我分叉一个进程来处理传入的数据,这样我就可以尽快地从中接收数据,而不用填满内核缓冲区。然后,子对象处理接收到的数据

简而言之,我的算法是:

收听数据。
收到数据后,检查错误。
用叉子叉掉孩子。
如果我是孩子,请对数据执行我想执行的操作并退出。
如果我是家长,收获所有僵尸孩子
waitpid(-1,NULL,WNOHANG)

重复一遍

首先,您对上述内容有何评论?我正在使用
socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)
创建套接字,绑定
AF_INET
INADDR_ANY
以及
recvfrom
,不带标志

第二,有人能提出一些建议吗?我可以用这些建议来测试这个应用程序(或者至少是侦听器)是否能够处理比我预期的更多的消息?或者,我需要拼凑一些东西来做这件事

我想后者会更好,这样我可以比较生成的数据和接收的数据。但是,如有评论,将不胜感激

数据不能丢失

除非您自己在udp上实现了可靠的交付,否则您将丢失数据

倾听数据。当数据丢失时 已收到,请检查错误。分叉 孩子

在我听来,每包东西你都要给一个孩子付钱?如果是这样的话,这将是相当低效的——如果您需要每秒处理1000-10000条消息,您将每秒创建1000-10000个进程。而是将员工集中在一起,并通过某种形式的IPC与他们沟通

至于测试这一点,我建议您创建一个与服务器上的日志/跟踪一起工作的客户机。您将完全控制发送速率,您可以发送任何您喜欢的消息(例如,包括您自己的序列号以验证传递)