2013-05-13 35 views
-1

我一直在研究服务器每次服务(sendto + receivefrom)'x'个客户端的服务器客户端应用。为此,我在服务器端创建了'x'个线程数,以便每个线程都可以独立于一个客户端。每个线程内部都有一个专门用于客户端的套接字。我正在考虑让这些套接字非阻塞,但现在我认为在每个线程中使用阻塞套接字是一个更好的主意。阻塞套接字持续等待接收数据,并且每当需要发送任何内容时,都会调用sendto()。在这种情况下使用阻塞套接字是一种好方法,还是应该使用非阻塞套接字?
等待帮助!在多线程单服务器多客户端应用程序中阻塞套接字和非阻塞套接字

+1

如果每个连接都有一个专用的线程,则不需要使套接字非阻塞。另一方面,你应该小心不要有太多的连接,因为太多的线程可能会严重降低系统性能(CPU在线程之间进行更多的工作交换比做“真正的”工作)。 – 2013-05-13 06:10:47

+1

如果你的设计是1个线程/套接字,并且线程的基本目的是服务于网络请求......那么阻塞是*绝对是最好的方法。恕我直言... – paulsm4 2013-05-13 06:11:09

+0

@JoachimPileborg:非常感谢你的回复,但我在这里有点困惑。如果我的Socket在调用recvfrom()时阻塞并等待从客户端接收一些数据,并且同时服务器想要发送一些数据呢? – Ayse 2013-05-13 06:18:47

回答

1

我想让这些套接字非阻塞,但现在我认为在每个线程中使用阻塞套接字是一个更好的主意。阻塞套接字持续等待接收数据,并且每当需要发送任何内容时,都会调用sendto()。在这种情况下使用阻塞套接字是一种好方法,还是应该使用非阻塞套接字?

我同意。除非您预计会有数十万个连接,否则我认为没有理由超越线程并阻止I/O。 select()和朋友被设计的日子当替代阻止I/O是另一个进程,不是另一个线程。