使用线程的全双工客户端 - 服务器套接字

时间:2013-07-12 21:43:56

标签: c sockets pthreads

我需要在服务器和客户端之间建立双向(全双工)链接(我可以同时发送和接收数据)。通过我所做的研究,我发现最好的方法是让两个线程各自在客户端和服务器之间实现一个套接字。有没有人知道如何处理这个或已经看到一些类似的代码这样做?我是这个领域的新手,非常欢迎任何建议......

1 个答案:

答案 0 :(得分:1)

您不需要两个插槽进行全双工通信,除非您使用的是更高级别的传输协议,限制了您同时发送和接收的能力。

此类传输限制的一个示例是,如果您的服务器确实是HTTP服务器。然后,如果您需要使用HTTP与应用程序进行双向通信,则可能需要一个执行GET的连接,以及另一个执行PUT的连接。

否则,您的客户端可以同时读取和写入同一个套接字。您可以创建2个线程,其中一个正在读取,另一个正在写入,但它们每个都在同一个套接字上运行。

您的服务器可以使用类似的策略(每个连接一对线程),但如果服务器处理多个连接(比如数千个),那么您可能会遇到可伸缩性问题。通常,使用非阻塞I / O和一些高性能连接多路复用器(如epoll()kqueue()来解决此问题,并且您只创建与分配连接处理负载的内核一样多的线程。查看The C10K Problem以获取有关如何实施高度可扩展服务器的良好信息来源。