Multithreading 多线程Linux套接字编程设计
到目前为止,我一直在尝试编写一个支持一个客户机的服务器程序,在我尝试开发它的几天里,我得出结论,我需要线程。之所以做出这样的决定,是因为我从wifi套接字获取输入,然后对其进行处理,最后写入文件,处理时间很慢,因此我需要一个输入线程->循环缓冲->输出线程模式以及生产者-消费者模型,这在网络编程中非常常见 现在,情况变得复杂了,因为我需要管理客户端断开连接和重新连接。我考虑使用pthread_exit()清理所有信号量,然后在每次单客户端重新连接时重新初始化它们 我的问题是,这是否是一种有效的方法,即每次杀死线程和信号量并重新创建它们。有没有更好的解决办法Multithreading 多线程Linux套接字编程设计,multithreading,sockets,network-programming,pthreads,producer-consumer,Multithreading,Sockets,Network Programming,Pthreads,Producer Consumer,到目前为止,我一直在尝试编写一个支持一个客户机的服务器程序,在我尝试开发它的几天里,我得出结论,我需要线程。之所以做出这样的决定,是因为我从wifi套接字获取输入,然后对其进行处理,最后写入文件,处理时间很慢,因此我需要一个输入线程->循环缓冲->输出线程模式以及生产者-消费者模型,这在网络编程中非常常见 现在,情况变得复杂了,因为我需要管理客户端断开连接和重新连接。我考虑使用pthread_exit()清理所有信号量,然后在每次单客户端重新连接时重新初始化它们 我的问题是,这是否是一种有效的方
谢谢。一些评论和建议 1-In TCP检测到另一方已悄悄断开连接,即使不是不可能,也是非常困难的。客户端可以断开向服务器发送RST TCP消息或发送FIN消息的连接,这是一个很好的例子。有时,客户端可以在没有通知的情况下断开连接(崩溃、电缆断开等)
-
这里有一个建议是考虑客户端和服务器之间的通信方式。例如,您可以使用“选择”功能设置从客户端接收消息的超时,并检测静默客户端
- 此外,根据编程语言和操作系统的不同,对于试图通过客户端关闭的连接发送消息的服务器,您可能需要处理断管(SIGPIPE)信号(在Linux中,使用C/C++)
- 线程会消耗资源,例如,如果需要创建1000个线程,可能会耗尽操作系统资源
- 另一种选择是,只有一个使用者线程异步管理所有连接(套接字):a)每个连接都有自己的状态。b) 主线程遍历所有连接,并使用函数“select”检测连接读取或写入何时准备就绪。3) 使用非阻塞套接字,但这不是必需的,因为通过选择,您知道哪些套接字已准备就绪且不会阻塞
- 您可以使用函数select、poll、epoll
在编辑时,我使用简单的标志来通知线程停止并最终加入。它适用于两个连接,第三个连接面临问题。关闭上一个套接字和新套接字时是否应该延迟一些时间。在为新连接创建任何新套接字fd之前,我将关闭所有描述符。您是否使用标准套接字函数,如绑定、侦听、接受等?你粘贴的代码对我来说没有多大意义。