1
我是新來signalr,我想生成連接ID到特定的客戶端,並將其存儲在數據庫中,一旦任何客戶端完成任何更新將通知所有,但它是好的做法將context.connectionID存儲到數據庫中,如果不是,我想知道所有客戶端之間的連接需要幫助。信號r存儲Context.connectionID
我是新來signalr,我想生成連接ID到特定的客戶端,並將其存儲在數據庫中,一旦任何客戶端完成任何更新將通知所有,但它是好的做法將context.connectionID存儲到數據庫中,如果不是,我想知道所有客戶端之間的連接需要幫助。信號r存儲Context.connectionID
當客戶端調用服務器端的功能時,您可以通過Context.ConnectionId
檢索其連接ID。現在,如果您想通過集線器之外的機制訪問該連接Id,您可以:
只需讓Hub調用傳入連接ID的外部方法即可。 添加到OnConnected
字典中,並將其從OnDisconnected
中刪除。一旦你有你的用戶列表,你可以通過你的外部機制來查詢它。
Ex 1:
public class MyHub : Hub
{
public void AHubMethod(string message)
{
// Send the current clients connection id to your external service
MyExternalSingleton.InvokeAMethod(Context.ConnectionId);
}
}
EX : 2
public class MyHub : Hub
{
public static ConcurrentDictionary<string, MyUserType> MyUsers = new ConcurrentDictionary<string, MyUserType>();
public override Task OnConnected()
{
MyUsers.TryAdd(Context.ConnectionId, new MyUserType() { ConnectionId = Context.ConnectionId });
return base.OnConnected();
}
public override Task OnDisconnected()
{
MyUserType garbage;
MyUsers.TryRemove(Context.ConnectionId, out garbage);
return base.OnDisconnected();
}
public void PushData(){
//Values is copy-on-read but Clients.Clients expects IList, hence ToList()
Clients.Clients(MyUsers.Keys.ToList()).ClientBoundEvent(data);
}
}
public class MyUserType
{
public string ConnectionId { get; set; }
// Can have whatever you want here
}
// Your external procedure then has access to all users via MyHub.MyUsers
@does connectionID會一直改變客戶端重新連接..? –