2010-06-10 175 views
0

我有这种情况,我必须处理服务器中的多个实时UDP流。多个UDP端口

我有两个选择(我认为)

单插槽: 1)听在服务器上单个端口和接收同一端口上的所有客户端的数据,并创建线程为每个客户处理数据直到客户停止发送。 这里只有一个端口用于接收数据和用于处理数据的线程数量。

多个套接字: 2)客户端将请求从服务器的开放端口发送数据,应用程序将开放端口发送到客户端,并打开一个新的线程监听端口接收和处理数据。这里为每个客户端都有独特的端口来发送数据。

我已经实现了一种方法来知道哪个数据包来自UDP中的哪个客户端。

我有1000+客户端和60KB数据每秒我收到。

是否有使用上述方法

任何性能问题或者是在这里处理用C这类任务的任何有效的方式?

感谢,

Raghu

回答

0

有了很多的客户,其每个客户端一个线程是非常低效的,因为很多很多的上下文切换的必须执行。 另外,每个IP可以打开的端口数量是有限的(端口是16位数字)。

因此,“单插座”将更有效率。但是,您也可以使用异步API在单个线程中使用“Multipe Sokets”。如果您可以使用该包的有效负载来识别客户端,那么不需要为每个客户端设置一个端口。