問題タブ [reconnect]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
291 参照

google-app-engine - 再利用されたチャネル トークンで Google App Engine チャネル プレゼンスが起動しない

Google App Engine Channel API を使用して、「マスター」デバイスと複数の「リモート」間の双方向接続をサポートするアプリがあります。データ消費を節約するために、「マスター」はデータストア エンティティに記録されているリモート デバイスにのみデータを送信します。次のようになります。

{"ag5zfnBhbmRvcmEtaG9tZXIVCxINU29ja2V0U2Vzc2lvbhjZswEMremote1": "AHRlWrqfFk1Od_9FMObXMnbQRV0NPlAD41aRaYCZ8-dzpAV4aZI-6XjGqhlRBbGL8P4slwTUTw4mI2Mb8VgqWSnMbNyO7ewRHCwVnqCvY9vA-XS4vyESFlNS3nRbdeEjuCXEXMSMxiguixfjPDF5fiseQkXm2SOp2c0YD6onfM7PpN6gGDicH5A", "ag5zfnBhbmRvcmEtaG9tZXIVCxINU29ja2V0U2Vzc2lvbhjZswEMremote0": "AHRlWrr5tXCamZ5fN4z8LUM1Wj_60GFNYS7kOEokAM_QeAAL7nlYo5EDuYeEpz_kepwK-k1kQ543jDeTLmUXws9n_3L-ty1rsYUN3SIILfaf4_4UXDVujj6tWed2nmXvbZ8ScX7dOilJBjc_xdvIu6NRDhqe-Pt1oinRXcsAc_NpDFQEOs_5bH8"}

これは、チャネル キーをトークンに一致させる単なるキーです。エンティティは、どのリモートがオンラインで、どれが再利用可能で、いつ期限切れになるかを判断することもできます。これらは、チャネル プレゼンス インバウンド ハンドラーを使用して追加され、切断ハンドラーによってもエンティティから削除されます。ただし、これらのデバイスはいつでも切断される可能性があるため、リモートごとにチャネル トークンを再作成することは現実的ではありません。したがって、サーバーに接続するとき、サーバーは有効期限が切れていない古いトークンが使用されていないかどうかを確認し、データストア エンティティのキ​​ーツートークン ルックアップを介して古いチャネル トークンを返すことで、リモート デバイスにそれを使用するように指示します。

チャネルはデータを正常に受信しますが、チャネル プレゼンスは接続要求を受信しません。さらに興味深いことに、リモートが切断されたときに ping を取得することはありません。これは、iPhone (リモート プラットフォーム) のサファリで unbeforeload の問題が原因である可能性が最も高いです。ただし、開発サーバーでは完全に機能します。これはバグですか、それともこの方法でのトークンの再利用が信頼できない可能性がありますか?

注 リモートが古いトークンを使用するか新しいトークンを使用するかを決定する際に、新しいリモートの存在のデータストアを更新することもできますが、ソケットが実際にクライアント。

EDITさらに、別のリモートが使用しようとする前にリモートトークンが約4〜8分間非アクティブであった場合、この現象は発生しないことがわかりました。

EDIT2 さらに、iPhone を使用している場合、新しいトークンまたは古いトークンの使用に関係なく、チャネルは信頼できる接続の数分後にほとんどの場合 onerror ハンドラーをトリガーすることに気付きました。ただし、ラップトップではこれは発生しません。

0 投票する
0 に答える
141 参照

html - HTML5: サーバー送信イベント

html5 server-sent-events についていくつか質問があります。

接続が閉じられると、クライアントは常に再接続を試みます。サーバーが と再接続するまでの時間を定義できることは知っていますprintWriter.write("retry: 5000\n")。しかし、クライアントがこれを定義できる可能性もありますか? または、クライアント側で再接続を防ぐにはどうすればよいですか?

私のもう 1 つの質問は、サーバーがクライアントにエラーをスローする方法です。クライアントには errorhandler がありますeventsource.addEventListener('error', function(e) {...}, false);。だから、エラーをスローする方法があるに違いない?!

0 投票する
2 に答える
906 参照

javascript - 再接続タイムアウト時の socket.io イベント

アプリケーション内で websocket 通信を行うために socket.io を使用しています。接続が失われた後、再接続を 6 回試行し、タイムアウトに達します。再接続を試行しなくなったときに発行されるイベントはありますか?

0 投票する
5 に答える
5465 参照

java - WebSphere と StaleConnectionException

J2ee アプリケーションで StaleConnectionException が発生しました。私は調べて(そして検索して)、解決策を見つけました。

ここにあります。

StaleConnectionException を管理する必要がある場合、最初のメソッド呼び出しで 6 秒の最初のラグがあるため、このソリューションは好きではありません。

新しいブラウザ セッションの開始時に接続をテストしますが、これも気に入りません。

私が実装できるより良いものはありますか?

前もって感謝します。

クワック

0 投票する
1 に答える
740 参照

node.js - Socket.io: IE が再接続イベントを 1 回だけ発生させる

node.js/socket.io が正常に動作するアプリがあります。クライアントが接続を失うたびに、socket.io の定義済みプロセスを使用して再接続を試みます。

これは、Internet Explorer を除くすべてのブラウザーで正常に機能します。問題がどこにあるかを確認するために、すべての再接続イベントにいくつかのアラートを追加しました。

socket.io サーバーを停止すると (またはクライアント接続が失われると)、すべてのクライアントに「切断時」メッセージが表示されます。それで問題ありません。

IE 以外のクライアント

すべてのクライアントは、接続が復元されるまで 5 秒ごとに「再接続中...」メッセージを受け取り続けます。復元された場合は、最終的な OK メッセージを受け取ります。

IE を使用するクライアント

IE が再接続を試みる (初回) までにサーバーがまだダウンしている場合、クライアントは再接続の試行を続行せず、サーバーが再起動しても、ページが更新されるまでユーザーは接続されません。切断イベント以降、クライアントは「再接続中...」メッセージを 1 回だけ受け取ります。

プラスのテストとして、IE クライアントが再接続を試行する前にサーバーが復元された場合、クライアントは正常に再接続されます。

ここでこの問題を見つけました: https://github.com/LearnBoost/socket.io/issues/1020。しかし、彼らは解決に至りません。私は socket.io.js ファイルを動的に提供するので、彼らが提案する方法で編集することはできません。

ありがとう!

0 投票する
0 に答える
647 参照

python - 接続エラー後に redis が db0 に再接続する

1 から 8 までの dbs を使用して、同じ redis サーバーで複数のプログラムを実行しています。redis エラーを処理し、すべてのプログラムは正常に動作しており、ほとんどの場合、指定された db に再接続しますが、redis サーバーを再起動するとエラー 110 (タイムアウト) および 113 (ルートなし) が発生します。 ) すべてのプログラムが db0 に再接続します。それから身を守る方法はありますか?エラー111(接続が拒否されました)の場合に言ったように、すべてのプログラムは指定されたデータベースに再接続し、問題はありません。例:

r = redis.Redis('127.0.0.1', 6379, 3)

0 投票する
3 に答える
2569 参照

android - 「onDisconnect」で LocationClient が自動再接続する

接続が失われたとき (ユーザーが RAM をクリアしたとき)、LocationClient に再接続しようとしました。

私はこのコードを使用しようとしました:

しかし、内部で NullPointerException が発生しますmLocaitonClient.connect()

どうすれば修正して再接続できますか?