作为其中一个分配,我们必须在C中使用一些客户端实现非常简单的服务器。我们的想法是使用系统V IPC队列,我们创建一个客户端注册的队列,然后为每个客户端创建一个带有消息的队列。我想知道服务器部分。我应该有这样的事情:
while(1)
{
//some queue using code
sleep(100);
}
因此,对于每个时间间隔,我都检查每个队列并执行我必须做的事情,或者我应该使用信号通知服务器至少有一个队列已准备好进行管理。
如何在普通服务器中完成,他们是否有一段时间间隔,然后他们会检查他们需要做的所有事情,或者有更合适的方法来做这件事?
答案 0 :(得分:3)
你必须按照以下方式做点什么:
这是一个非常基本的答案,需要定义和原型,但是这应该给你一个基本的选择,例如。
此代码适用于freebsd,ubuntu和我的Windows计算机(鉴于你有正确的标题)它也被缩小并删除了一些定义,作为套接字描述符defs,因为它们非常多 - 它就是它。
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.
Select可以移植到Win32以及UNIX,但如果你在unix IE中对套接字进行任何繁重的工作,那么它不是推荐的选择:FreeBSD。如果你需要更深入并更好地管理插座,可以使用kqueue或epoll等。