クライアント側と呼ばれる方法のハブがあります。このメソッドは、10秒ごとに実行されるデリゲートを持つタイマーを起動します。ハブに誰も接続していない場合、このデリゲートを実行し続けるのは意味がないので、再スケジュールする前にデリゲート内からユーザーがまだ接続されているかどうかを確認したい。これを行う方法はありますか?SignalR - ユーザーがまだ接続されているかどうかの確認
答えて
おそらく最もよく使用される解決策は、現在接続されているユーザーを含む静的変数を保持し、使用するバージョンによってOnConnect
とOnDisconnect
またはIDisconnect
を実装することです。
あなたはこのような何かを実装します:
public class MyHub : Hub
{
private static List<string> users = new List<string>();
public override Task OnConnected()
{
users.Add(Context.ConnectionId);
return base.OnConnected();
}
//SignalR Verions 1 Signature
public override Task OnDisconnected()
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected();
}
//SignalR Version 2 Signature
public override Task OnDisconnected(bool stopCalled)
{
return base.OnDisconnected(stopCalled);
}
// In your delegate check the count of users in your list.
}
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.notify("Hello world");
http://forums.asp.net/t/1829432.aspx/1?How+do+I+get+list+of+connected+clients+on+signalr+からだから、context.Clients.Countを得ることができる必要があります。
この投稿はまた、多くの良い情報を持っているwikiを参照しています。 OnConnected/OnDisconnectedの例を使用してユーザーを追跡し、ユーザーがゼロになると呼び出しを停止することができます。
おかげで、私はやろうとしていますこれはハブの中から...それはまだ動作しますか? – edobry
あなたのデータベースにあなたのconnectionIdを保存する場合は、あなたがこれを確認することができます。提案のための
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
'Microsoft.AspNet.SignalR.Transports'を使用して追加する必要があります –
また、.Transportsはコアアセンブリ内にありません...バマー!参照:https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.transports.transportmanager%28v=vs.118%29.aspx?f=255&MSPPError=-2147217396 –
- 1. ユーザーにマイクが接続されているかどうかを確認する
- 2. ユーザーがFacebookに接続しているかどうかを確認して、ページが好きかどうかを確認してください
- 3. Android:Bluetoothがどのデバイスに接続されているかどうかを確認してください。
- 4. SQLiteデータベース接続がまだ開いているかどうか確認してください
- 5. PySerial、シリアルが接続されているかどうか確認してください
- 6. ソケットが接続されているかどうかを確認してください
- 7. Godot - コントローラーが接続されているかどうかを確認してください
- 8. SignalR ConnectionIdを指定すると、そのセッションがまだ接続されているかどうかを確認できますか?
- 9. USB/AC接続があるか確認してください
- 10. デバイスがウェブに接続されているかどうかを確認する
- 11. Bluetoothが接続されているかどうかを確認する
- 12. MQが接続されているかどうかを確認する方法
- 13. クライアントがまだ接続されているかどうかを確認する方法C++
- 14. ソケットがまだ接続されているかどうかを確認するには?
- 15. ユーザーがdbで確認されているかどうかを確認
- 16. iPhoneがインターネットに接続しようとしているかどうか確認してください
- 17. ユーザーがインターネットに接続されているかどうかを確認する方法?
- 18. ユーザーがビューに接続されているかどうかを確認する方法laravel
- 19. ファイルがWindowsインストールドライブに入っているかどうか、ドライブが接続されているかどうか確認してください
- 20. アラートダイアログインターネットに接続されているかどうか再確認するには
- 21. 接続しているユーザーの数を確認しますか?
- 22. モデルのデータが正確にどのように接続されているか確認できますか?
- 23. ユーザーがまだangularfire2で認証されているかどうかを確認します
- 24. 別のユーザーが認証されているかどうかの確認
- 25. Unityからのインターネット接続を確認してください。
- 26. libmemcached - 接続しているかどうかを確認する
- 27. Excel 2016のVBAでのADODB接続タイムアウト - 接続がまだアクティブかどうかを確認する方法?
- 28. mongoDBが接続されていることを確認してください。
- 29. ファイルがアップロードされているかどうか確認してください。
これは他の場所で言及されているのを見ましたが、もっと良い方法があることを望んでいました。ありがとう、私はそれを試してみよう! – edobry
複数のスレッドが単一のリソースにアクセスしようとする同時性に問題はありますか? –
ハブの寿命モデルであるため、これをバックプレーンでスケーリングする可能性がなくなるため、これは確実に機能しないだけでなく、唯一の本当の答えは、redisやappfabricのような共有キャッシュ内のオンラインステータスを追跡することです。 – Bon