2012-02-17 12 views
26

の接続状態を検出し、どのように.disconnectイベントに結合することにより、トラップSignalRと、クライアント側の切断イベントをすることができます。SignalRは:私が見てきたクライアント

今、私はこれをやったことを、私はそれは継続的にそれが成功するか、ユーザーが相殺されるまで接続しようとしたところ、「サイクルを再接続するのを待っている」にクライアントを載せていきたいと思います。ハブは接続状態プロパティを公開していますか?クライアントは常に接続しようとしている

var isConnected; 

function onConnected() { isConnected = true; } 

hub.disconnect = function() { while(hub.notconnected) { connect(); } 

答えて

46

JSクライアントは、デフォルトで110秒、一定時間再接続しようとします。 connection.stateChangedイベントを購読して、状態が変化したときに更新を取得して、ユーザーに表示したり、異なる切断シナリオに対するSignalRの応答を検証することができます。あなたが期待するように私のテストで

は、状態が正しく、等の切断と再接続に更新されました。

More information on signalr connections

function connectionStateChanged(state) { 
    var stateConversion = {0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected'}; 
    console.log('SignalR state changed from: ' + stateConversion[state.oldState] 
    + ' to: ' + stateConversion[state.newState]); 
} 

connection = $.connection(signalR_Endpoint); 
connection.stateChanged(connectionStateChanged); 
connection.start({ waitForPageLoad: false }); 
+7

これはまったく当てはまりません。私のサーバーへの接続が失われた場合、結局は再接続を断念し、手動で接続を再開するように強制します。私はいつも再接続しようとしているとは言いません。 – KingOfHypocrites

+2

可能な状態は '$ .signalR.connectionState'のように' $ .signalR.connectionState'に列挙されていることに注意してください。あなたはクライアント[コード](HTTPSを見ると、[ここ] stateChanged'(https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client#connectionstatechanged-handlerchange-) –

+0

'の現在の使用状況を見ることができます: //github.com/SignalR/SignalR/blob/master/src/Microsoft.AspNet.SignalR.Client.JS/jquery.signalR.transports.longPolling.js)、私は実際に停止する状態への参照が見つかりませんでした一定期間後に再接続する。しかし、成功した接続が確立されるまで、失敗した再接続試行間の時間が長くなるバックオフ計算があります。だから私は、JSがブラウザで生きている限り「永遠に」再接続を試みると信じています。 – Mazrick

8

私は(擬似コード)のようなものを考えています。あなたはそれについて心配する必要はありません。接続が正常に再確立されたときに何かしたい場合に備えて、リスンできる再接続されたイベントがあります。

EDIT:これは変更され、クライアントは、一定期間中に再接続しようとします。その後、切断イベントを検出して手動で再起動する必要があります。

+0

私は再接続を実装するために必要な特別なものはありますか? DisconnectまたはReconnectイベントが起動しないようです。現在はやってます:$ .connection.hub.disconnect = onDisconnected; $ .connection.hub.reconnect = onReconnected;ハブにIDisconnectを実装しました。 – Heather

+0

@Jon IDisconnectインターフェイスはサーバー側のイベント用で、正常に動作します(SignalR 0.4を使用していることを確認してください)。クライアント側では、Disconnectイベントは決して発生しません。なぜなら、SignalRは本当にあなたが切断されていることを決して確かめていないからです(これは将来変わるかもしれません)。再接続しても問題ありませんが、テストしていないので、それを手伝ってはいけません。 – nmat

+1

私は、切断された状態になった場合、c#クライアントが再接続しないことを発見しました。私はhubConnection.Start()をやり直さなければなりません。 (私はこれが良い練習かどうか分かりません!)私のシナリオは、あるマシン上のコンソールアプリケーションで、別のマシン上のWebサイトと対話していることです。私がウェブサイトをきれいにする/再構築する場合、私は手動で強制しない限り、再接続、切断、そして決して回復しません。 – Andiih

関連する問題