クライアント側と呼ばれるメソッドを持つハブがあります。このメソッドは、10 秒ごとに実行されるデリゲートでタイマーを起動します。誰もハブに接続していない場合、このデリゲートを実行し続けるのは意味がないため、スケジュールを変更する前に、デリゲート内からまだ接続しているユーザーがいるかどうかを確認したいと思います。これを行う方法はありますか?
質問する
33891 次
4 に答える
18
おそらく最もよく使用される解決策は、使用しているバージョンに応じて、現在接続され、オーバーライドまたは実装されているユーザーを含む静的変数を保持すること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)
{
users.Remove(Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
// In your delegate check the count of users in your list.
}
于 2012-12-03T21:37:04.533 に答える
17
データベースに connectionId を保存すると、次のことを確認できます。
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
于 2015-11-18T12:28:43.550 に答える
1
http://forums.asp.net/t/1829432.aspx/1?How+do+I+get+list+of+connected+clients+on+signalr+から
IHubContext context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.notify("Hello world");
したがって、context.Clients.Countを取得できるはずです。
その投稿はまた、たくさんの良い情報を持っているウィキを参照しています。OnConnected / OnDisconnectedの例を使用してユーザーを追跡し、ユーザーがゼロになったら通話を停止してみてください。
于 2012-12-03T21:36:29.357 に答える