作为其中一个配置,我们必须在C中使用一些客户端实现非常简单的服务器.我们的想法是使用系统V IPC队列,我们创建一个客户端注册的队列,然后为每个客户端创建一个带有消息的队列.我想知道服务器部分.我应该有这样的事情:
while(1)
{
//some queue using code
sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
因此,对于每个时间间隔,我检查每个队列并执行我必须做的事情,或者我应该使用信号通知服务器至少有一个队列已准备好进行管理.
它是如何在普通服务器中完成的,它们是否有一段时间间隔,之后它们会检查他们需要做的所有事情,或者有更合适的方法来执行此操作?
小智 3
你必须按照以下方式做一些事情:
这是一个非常基本的答案,需要适当的定义和原型,但这应该为您提供一个基本的选择示例。
这段代码可以在 freebsd、ubuntu 和我的 Windows 计算机上运行(假设你有正确的头文件),它也被缩小并删除了一些定义,像套接字描述符定义一样糟糕,因为这些都差不多了 - 就是这样。
struct timeval timeout;
int rc
fd_set wfdset,rfdset,errfdset;
//Do some checks put them in either read fdset or write fdset or error fdset
FD_SET (socket_sd, &rfdset);
timeout.tv_sec = 0;
timeout.tv_usec = 250 * 1000;
rc = select (maxfds + 1, &rfdset, &wfdset, NULL, &timeout);
//loop through the sockets and read from them at this point.
Run Code Online (Sandbox Code Playgroud)
Select 可移植到 Win32 和 UNIX,但如果您要在 UNIX IE:FreeBSD 中的套接字上进行任何繁重的工作,则不建议选择它。如果您需要更深入并更好地管理套接字,请使用 kqueue 或 epoll 等。