5

割り当ての1つとして、いくつかのクライアントを使用してCで非常に単純なサーバーを実装する必要があります。つまり、System V IPCキューを使用して、クライアントが登録する1つのキューを作成し、クライアントごとにメッセージを含む1つのキューを作成します。サーバー部分について少し疑問に思っています。私はこのようなものを持っている必要があります:

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

したがって、時間間隔ごとに、すべてのキューをチェックして、実行する必要があることを実行します。または、シグナルを使用して、少なくとも1つのキューを管理する準備ができていることをサーバーに通知する必要があります。

通常のサーバーではどのように実行されますか?実行する必要があるすべてをチェックする時間間隔がありますか、それともこれを実行するためのより適切な方法がありますか?

4

1 に答える 1

3

あなたはこれに沿って何かをしなければなりません:

これは非常に基本的な答えであり、定義とプロトタイプを用意する必要がありますが、基本的な選択例が得られるはずです。

このコードは、freebsd、ubuntu、および私のWindowsコンピューターの両方で機能します(正しいヘッダーがある場合)。また、縮小され、一部の定義が削除されます。これらはほとんどの場合、ソケット記述子defとして機能します。

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は、UNIXだけでなくWin32にも移植可能ですが、UNIX IE:FreeBSDでソケットを大幅に持ち上げる場合は、お勧めできません。ソケットをより深く管理する必要がある場合は、kqueueやepollなどを使用してください。

于 2012-05-11T21:08:09.667 に答える