c -如果我使用select()服务器编写peer 2 peer应用程序,而不使用fork(),线程,共享内存,信号量,



我正在编写一个对等2点聊天,其中包括客户端部分和服务器部分在同一个文件。目前,我使用select()服务器,不使用fork(),线程,共享内存,信号量来处理并发(我只是使用select()来区分客户端和服务器的套接字)。

因为我每次启动我的应用程序只创建一个进程,假设我的应用程序名为P2P。我通过./P2P PortofServer PortServerofPeerIconnect IPAddress启动一个对等体(包括客户机和服务器)。在while循环中,我使用select()来等待来自客户端的连接。每次我启动一个对等体时,客户机部分将连接到其他对等体的服务器部分。

是否有可能不使用fork(),线程,只使用select()来编写对等2点聊天?非常感谢。

无论您选择与OS交互的方式(select()或评论中建议的libevent, epoll(), kqueue,甚至boost::asio,如果c++是可接受的解决方案),异步模式将允许您在单个线程中处理所有内容,如果实现正确并且没有阻塞主调度循环。

所以,如果你在异步模式下使用所有IO,这是可能的。但是要做好阅读&写操作可以在字符串/数据包的中间终止,或者如果select()说套接字还没有准备好进行所需的操作(包括write),您将被阻塞。所有到服务器的新连接(套接字)和来自控制台的用户输入(我猜,因为它是一个聊天程序)必须通过select()(或其他事件调度机制)。

最新更新