gpt4 book ai didi

c - 如果我使用 select() 服务器编写一个对等 2 个对等应用程序而不使用 fork()、线程、共享内存、信号量,这样可以吗?

转载 作者:行者123 更新时间:2023-11-30 17:33:31 25 4
gpt4 key购买 nike

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

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

是否可以不使用fork()、线程而仅使用select()来编写点2点聊天?非常感谢。

最佳答案

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

所以是的,如果您在异步模式下使用所有 IO,这是可能的。但要做好准备,读取和写入可能会在字符串/数据包的中间终止,否则如果 select() 表示套接字尚未准备好执行所需的操作(包括 )。所有与服务器的新连接(套接字)以及来自控制台的用户输入(我猜,因为它是一个聊天程序)都必须经过 select() (或其他事件调度机制)。

关于c - 如果我使用 select() 服务器编写一个对等 2 个对等应用程序而不使用 fork()、线程、共享内存、信号量,这样可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com