我想在服务器和客户端之间创建一个聊天程序,我希望客户端或服务器能够随时向另一端发送消息,而无需等待示例:
Client: hi
Server: hi
Server: I'm the server.
Server: How are you?
Client: Good.
在此示例中,服务器不会等待客户端回复并随时发送另一条消息。
我应该使用函数select
吗?如果是这样,我应该如何确定超时,超时值是忙等待的解决方案?
select
函数是解决此问题的最佳方法吗?
感谢。
答案 0 :(得分:1)
使用select
似乎是正确的方法,特别是如果您希望程序在Windows上运行。这将允许您阻止进程并同时等待来自多个客户端的消息。
通常,您应将超时设置为NULL
,以便服务器无限期地阻止来自客户端的请求。仅当您因其他原因需要定期唤醒服务器时,超时才有用。
如果您的目标是Unices(如Linux),使用poll会更容易,更有效。这基本上是相同的,但界面更容易使用。如果文件描述符编号大于1024,则select
变得非常难以使用,如果您希望服务器处理大量客户端,则会出现问题。
如果您专门针对Linux并且不关心可移植性,您甚至可以使用epoll,它具有更多的性能优势,并且可以说更容易使用。
如果您只定位Windows,则可以为每个套接字create event objects,然后使用WaitForMultipleObjectsEx等待来自其中任何一个的数据。这提供了与poll
类似的功能,但API非常复杂。