C 言語で複数 (1000 以上) のクライアント接続を同時に処理できるサーバーを作成しようとしています。すべての接続は、次の 3 つのことを達成するためのものです。
- サーバーにデータを送信する
- サーバーはデータを処理します
- サーバーがクライアントにデータを返す
すべての接続を処理するためにノンブロッキング ソケットと epoll() を使用していますが、サーバーが 1 つのクライアントからデータを受信した直後に問題が発生し、その前にデータの処理に数秒かかる関数を呼び出す必要があります。接続を閉じる前にクライアントに送り返す必要がある結果を返します。
私の質問は、1 つのクライアントのデータが「調理中」のときに、より多くの接続を処理し続けるために、どのパラダイムを使用できるかということです。
コンピューティング関数を呼び出す必要があるたびにスレッドまたはプロセスを作成することでそれを行う可能性について少し調査してきましたが、可能な同時接続の数を考えるとこれが可能かどうかはわかりません.なぜ私がここに来たのは、この問題で私が無知であることに光を当てることができる誰かがより経験豊富であることを期待していたからです.
コードスニペット:
while (1)
{
ssize_t count;
char buf[512];
count = read (events[i].data.fd, buf, sizeof buf); // read the data
if (count == -1)
{
/* If errno == EAGAIN, that means we have read all
data. So go back to the main loop. */
if (errno != EAGAIN)
{
perror ("read");
done = 1;
}
/* Here is where I should call the processing function before
exiting the loop and closing the actual connection */
answer = proc_function(buf);
count = write (events[i].data.fd, answer, sizeof answer); // send the answer to the client
break;
}
...
前もって感謝します。