私はオンラインゲームに取り組んでおり、サーバー側で作業しているときに少し問題が発生しました。
Javaでノンブロッキングソケットを使用する場合、すべてのデータが利用可能になるまで処理できない完全なパケットデータセットを処理するための最善のアクションは何ですか?たとえば、大きな2Dタイルマップをソケット経由で送信します。
私はそれを処理する2つの方法を考えることができます:
私の例の大きな2Dタイルマップを処理するために必要な完全なデータセットを処理するのに十分な大きさのByteBufferを割り当てます。すべてが受信され、そこから処理されるまで、読み取りデータをバッファーに追加し続けます。
ByteBufferのサイズが小さい場合(おそらく1500)、ファイルから完全に処理できるようになるまで、後続の読み取りを実行してファイルに出力できます。これにより、大きなByteBufferを使用する必要がなくなりますが、ディスクI/Oが原因でパフォーマンスが低下します。
すべてのSocketChannelに専用のByteBufferを使用しているので、処理が完了するまでデータを読み込み続けることができます。問題は、2Dタイルマップのサイズが2MBの場合、1000個の2MB ByteBufferを使用するのが本当に賢明ですか(1000がクライアント接続の制限であり、それらがすべて使用されていると仮定)?私が考えていないより良い方法があるに違いありません。
私は物事をシンプルに保ちたいと思いますが、私はどんな提案にもオープンであり、助けに感謝します。ありがとう!