- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个点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/
我是一名优秀的程序员,十分优秀!