5

作为一项任务,我们必须用 C 语言实现带有一些客户端的非常简单的服务器。这个想法是,使用系统 V IPC 队列,我们​​创建一个客户端注册的队列,然后对于每个客户端,都有一个带有消息的队列。我想知道服务器部分。我应该有这样的事情:

while(1)
{
  //some queue using code
  sleep(100);
}

因此,对于每个时间间隔,我都会检查每个队列并做我必须做的事情,或者我应该使用信号通知服务器至少有一个队列已准备好进行管理。

它是如何在普通服务器中完成的,他们是否有一段时间检查他们需要做的一切,或者有更合适的方法来做到这一点?

4

1 回答 1

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 等。

于 2012-05-11T21:08:09.667 回答