EDIT:私はクライアント側をサーバー側に切り替えても構いませんが、コンセプトは変わりません。返信するには確認信号が必要です。
これはウェブソケットの問題ではありません。むしろTCP/IPの問題です。データを送信すると、ネットワークアダプターのバッファーからフラッシュされたタイミングを知ることができますが、最後のパケットがいつ他のエンドポイントに到着したかを知ることはできません。
これはすべてのTCP/IP接続に共通する問題であり、いくつかの使用例で私が見つけた唯一の確実な解決策は、このようにクライアントにACK(確認応答)を返すことです。メッセージを受信すると、サーバ上で
、:クライアントで
ws.send(""); // acknowledge the server received the message
// don't close the connection, linger instead
// process the message...
:あなたが気づくことのよう
// create ws and immediately set a flag
ws.lingering = false;
// attach receive event before you open the socket
ws.on("data", function() {
if (ws.lingering)
{
// now you can terminate the connection
ws.terminate();
resolve(1);
}
});
// now open the socket and send message without terminating, yet
ws.on("open", function() {
console.log("subscribing...");
ws.send(creds);
ws.lingering = true;
});
、サーバーから送信されたメッセージは、クライアント上でチェックされません、それは単に待つ信号です。
出典
2017-06-11 17:09:11
pid