2016-04-10 5 views
3

私はノードからこのAutobahnJSコードを使ってサービスからデータを受け取ります。それは素晴らしく、毎秒複数のイベントを取得します。私のインターネットが一時的に切断されると、アウトバーンは紛失した接続を検出せず、コンソールに「WebSocket接続が切断されました」というメッセージを表示しません。無期限に。autobahn(ノード)ドロップされた接続、無限の待機を検出していない、私はタイムアウトを設定することはできますか?

1分後にデータが到着しない場合は、タイムアウトが設定できますか?再接続しますか?または、サーバーにpingを実行するためにsetTimeout関数を使用することはできますか。また、pongが接続を閉じて再オープンしようとしない場合は、

私の指が出血するまで私はグーグルで行ったが、私はこの質問に直接答えは見つけられなかった。どうもありがとうございました!

connection.onopen = function(session) { 
    session.subscribe(arg, someEvent); 
    } 

connection.onclose = function() { 
    console.log("Websocket connection dropped"); 
    } 

connection.open(); 

答えて

2

データが送信されていないと汚れていない切断を認識できません。プロトコルレベルのWebSocket ping/pong機構はブラウザでは公開されていません。また、Autobahn | JSはNode.jsで実行しても処理が異なりません。

当面は、アプリケーションレベルで独自のping/pongメカニズムを実装する必要があります。

+0

ノードで実行している場合、AutobahnJSは "ws"ライブラリを使用します。このライブラリは、WebSocket ping/pongを公開する(または公開しない)かもしれません。もしそうなら、それをAutobahnJSで使うことができます。しかし、gzostが指摘するように、W3C仕様のブラウザWebSocket APIは単にそれを公開しません。ブラウザは自分自身でWS ping/pongを実行するかもしれません(少なくともIEではそうしていました)。 – oberstet

+1

私は最後のデータを受け取った時をチェックし、あまりにも多くの時間が渡されたときにconnection.close()を呼び出し、onclose()にconnection.open()を再度追加しました。私の人生のために、私はそれを働かせることができませんでした。接続を閉じると、再び開こうとするとエラーになります。私はAutobahn Pythonを試しましたが、ドキュメンテーションとサンプルはどこにでもありますので、setProtocolOptionsをAutoPingに設定する方法を理解できませんでした。私はついにそれをあきらめ、ハッキングしました。setIntervalがタイムアウトexit()を決定した後、それを 'while:do done' bashスクリプトでラップします。 – heapoverflow

+1

私は作業ノードやpythongの例に非常に感謝しています! – heapoverflow

関連する問題