データを送信するときに最初に競合状態が発生しました。問題は、複数の SocketAsyncEventArgs を使用してデータを送信できるようにしていたことでしたが、最初のパケットは 2 番目のパケットの前に完全には送信されませんでした。すべてのデータが送信されるまでループするバッファに収まらず、最初のパケットが小さい 2 番目のパケットよりも大きかったため、2 番目のパケットが送信され、最初のパケットの前にクライアントに到達しました。
データの送信に使用するオープン接続に 1 つの SocketAyncEventArgs を割り当て、セマフォを使用してアクセスを制限し、完了したら SocketAsyncEventArgs コールバックを行うことでこれを解決しました。
すべてのデータが送信され、次の送信の準備が整ったときにコールバックされるため、これは正常に機能します。これに関する問題は、開いている接続にデータをランダムに送信したいときにブロックが発生し、大量のデータが送信されてスレッドがブロックされることです。
私はこれに対する回避策を探しています。データの送信が要求されたときにキューを作成することを考えました。パケットをキューに追加し、1 SocketAsyncEventArgs を単純にループしてそのデータを送信します。
しかし、スケーラブルでありながらこれを効率的に行うにはどうすればよいでしょうか? リクエストされた順序でパケットを送信している間は、できるだけブロックを避けたい.
どんな助けにも感謝します!