ライブラリ(ddp-client)を編集して、X秒ごとにpingを送信するハートビートタイマーを使用しました。しかし、私はブルートゥースハードウェアでいくつかの仕事をしています。ブルートゥースは一時的にイベントループをブロックしていると思われるため、時々戻ってこないpingを担当していると思います。イベントループの特定の機能に優先順位を付ける方法があるので、他のものの前に常に実行されるでしょうか?サーバーからの応答メッセージがいつ到着するのか正確にはわからないので、setImmediate
はここでは適切ではないと思います。nodejs関数実行の優先順位付け
次のようにタイマーの実装は、おおよそ次のとおりです。
every X seconds
if(ping outstanding) {
//Did not resolve in time
closeConnection()
} else {
ping outstanding = true
sendPing()
}
私はBluetoothモジュールなしでそれを実行する場合、これは完全に正常に動作します。 Bluetoothモジュールを有効にすると、pingが解決されないことがあります。これは、Bluetoothのスキャンに要する時間がタイマーの間隔よりも長くなることがあり、実際には接続されている間に切断されるためです。
@robvandijk - これはあなたの質問に答えましたか?もしそうなら、答えの隣にあるチェックマークをクリックしてコミュニティーに示すことができます。また、ここでstackoverflowの正しい手順に従うための評判を得ることができます。 – jfriend00