最後のパケットからのACKが受信されるまで、Winsockのsend()関数がブロックされることを読みました。今、私はターン制のロールプレイングゲームのためにサーバーで遊んでいます。すべてが1つのスレッドで処理されます(64ソケットの場合)。要求が受信され、処理され、応答がソケットに書き込まれます。このプロセスを中断することはできません。
この方法で、たとえば1000クライアント(64ソケットごとに1つのスレッド)を処理することは可能ですか?
send()の完了に時間がかかりすぎたり、クライアントが悪意を持ってACKを送信しなかったり、接続が中断されたりした場合、サーバー全体がブロックされませんか?
ネットワークとリクエスト処理のロジックを2つのスレッドに分割しますか?その場合、ネットワーク転送を処理するスレッドは、send()またはrecv()によってブロックされる可能性があります。
それとも、オーバーラップしたI / Oを使用するのが最善でしょうか?