ソケットを介してメッセージを送信する際に発生する問題を解決する最善の方法についてアドバイスを求めています。ソケットが常に開いていることを保証できない場合でも、メッセージが送信される順序、つまり先入れ先出しを確実に保持する必要があります。
私のプログラムには send メソッドを持つネットワークマネージャーがあります。この send メソッドは、メッセージ オブジェクトを受け取り、それをソケット経由でプッシュしようとします。
ただし、ネットワーク接続が失われたためにソケットが閉じられることがあり、メッセージの送信を停止し、ソケットが再開するのを待っている間、新しいメッセージをキューに入れる必要があります。ソケットが再び開くと、キューに入れられたメッセージが順番に送信されます。
私は Javascript と Websockets を使用しています。私は今このようなものを持っていますが、欠陥があるようです:
function send(msg) {
if (msg) {
outbox.push(msg);
}
if (!readyState) {
return setTimeout(send, 100);
}
while (outbox.length) {
socket.send(outbox.shift());
}
}
誰もこのような問題に取り組んだことがありますか? プログラムを構築するための一般的なアプローチ、または使用できるアルゴリズムを探しています。