2010-04-20 70 views
0

我正在将UDP侦听器从Java重构为C.它需要处理每秒1000到10000个UDP消息,平均数据长度大约为60个字节。没有必要的答复。数据不会丢失(不要问为什么选择UDP)。对UDP服务器进行基准测试

我分离了一个处理传入数据的进程,以便我可以尽快收回 - 而不会填满我的内核缓冲区。小孩然后处理收到的数据。

总之,我的算法中是:

监听数据。
收到数据时,检查错误。
把孩子岔开。
如果我是一个孩子,做我的数据并退出。
如果我是父母,收获任何僵尸的孩子waitpid(-1, NULL, WNOHANG)
重复。

首先,有关上述的任何意见?我使用socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)创建套接字,与AF_INETINADDR_ANYrecvfrom绑定,没有标记。其次,任何人都可以建议我可以用来测试这个应用程序(或者至少是侦听器)能够处理比我所期望的更多的消息吗?或者,我需要一起破解一些东西来做到这一点。

我猜想后者会更好,这样我可以比较生成的数据和接收到的数据。但是,意见将不胜感激。

回答

2

数据不能丢失

丢失数据,除非你在UDP上实现可靠的deliviry自己。

监听数据。当收到数据为 时,请检查错误。关闭 孩子。

这听起来像是你为每一个小包掏出一个小孩?如果是这样,那将会非常低效 - 如果您需要处理1000-10000个消息/秒,您将创建1000-10000个进程/秒。而是让你的工作人员保持联系,并通过某种形式的IPC与他们沟通。

至于测试这个,我建议你扔在一起的客户端与服务器上的记录/跟踪一起工作。您可以完全控制发送速率,您可以发送任何您喜欢的消息(例如,包含您自己的序列号以验证发送)。