在C中的两个服务器之间传递数据的最佳方法?

时间:2010-10-22 13:01:27

标签: c sockets ipc

我写了一个程序,用C创建一个TCP和UDP套接字并启动两个服务器。该应用程序的目标是通过TCP套接字监视发送它的UDP数据包的请求(即监视“0x01 0x02”之类的东西,如果我看到它,然后让UDP服务器解析有效负载,并转发它到TCP服务器进行处理)。问题是,UDP服务器将忙于保持另一台设备,实际上使用此设备来回发送数千个数据包。那么,连续监视来自TCP服务器的请求的最佳方法是什么,但是在请求时从UDP服务器发送某些有效负载,因为UDP服务器将忙碌?

我查看了使用信号量和/或互斥量的pthreads(不确定所有套接字操作是否是线程安全的,如果这是接近它的正确方法)以及fork / pipe。将UDP服务器作为子进程分离似乎很容易,但我不确切地知道如何在两个服务器之间传递我需要的数据类型(需要来自TCP的请求数据和来自UDP的有效负载数据)。

4 个答案:

答案 0 :(得分:1)

首先,将这两个服务器放在一个程序中是否有意义?如果是这样,您将不必在进程之间进行通信,整个逻辑变得非常容易。您将不得不考虑进行异步输入和输出,select()函数就是为此而设计的。关于如何执行此操作会有很多解释,快速查看this page

但是,如果您必须有两个单独的进程,那么您需要为inter-process communication选择一种机制,其中有几种,您的选择将受到您的操作的影响系统。 pipe(如果可用)可能是合适的,就像Unix named pipe一样。或者您可以查看第三方消息传递框架,或者只使用共享内存和/或信号量(但要非常小心!)。

答案 1 :(得分:1)

你应该注意的是libevent,你正在重新发明轮子的任何其他东西自己编写这个低级代码。这是TutorialGoogleKrugle

此外,您应该在服务器之间使用一些预定义的协议。有很多可供选择。从非常简单的XDRProtocol Buffers

答案 2 :(得分:0)

你可以在Unix上使用管道。见http://tldp.org/LDP/lpg/node11.html

答案 3 :(得分:0)

嗯,你当然选择了一个有趣的C介绍!

您可以尝试共享内存。什么操作系统?