Tôi có một trung tâm có phương pháp được gọi là phía máy khách. Phương thức này khởi chạy bộ hẹn giờ với một đại biểu chạy 10 giây một lần. Vì nó sẽ không có ý nghĩa để tiếp tục chạy đại biểu này nếu không có ai được kết nối với hub, tôi muốn kiểm tra xem có người dùng nào vẫn được kết nối từ bên trong đại biểu trước khi tôi lên lịch lại nó hay không. Có cách nào để làm điều này không?SignalR - Kiểm tra xem người dùng vẫn đang kết nối
Trả lời
Có lẽ giải pháp được sử dụng nhiều nhất là giữ một biến tĩnh chứa người dùng hiện đang kết nối và ghi đè OnConnect
và OnDisconnect
hoặc triển khai IDisconnect
tùy thuộc vào phiên bản bạn sử dụng.
Bạn sẽ thực hiện một cái gì đó như thế này:
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.
}
Từ 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");
Vì vậy, bạn sẽ có thể để có được context.Clients.Count.
Bài đăng đó cũng tham chiếu đến wiki có nhiều thông tin tốt. Bạn có thể thử sử dụng các ví dụ OnConnected/OnDisconnected để theo dõi người dùng và khi bạn nhận được 0 người dùng dừng cuộc gọi của bạn.
Cảm ơn đã gợi ý, nhưng tôi đang cố gắng để làm điều này từ bên trong một trung tâm ... nó sẽ vẫn hoạt động? – edobry
Nếu bạn lưu connectionId của bạn trong cơ sở dữ liệu, bạn có thể kiểm tra điều này:
var heartBeat = GlobalHost.DependencyResolver.Resolve<ITransportHeartbeat>();
var connectionAlive = heartBeat.GetConnections().FirstOrDefault(c=>c.ConnectionId == connection.ConnectionId);
if (connectionAlive.IsAlive)
{
//Do whatever...
}
Bạn cần phải thêm 'bằng cách sử dụng Microsoft.AspNet.SignalR.Transports' –
Cũng không nên .Transports là trong Core hội ... bummer! Xem: https://msdn.microsoft.com/en-us/library/microsoft.aspnet.signalr.transports.transportmanager%28v=vs.118%29.aspx?f=255&MSPPError=-2147217396 –
- 1. SignalR - Xử lý người dùng bị ngắt kết nối
- 2. Kiểm tra xem kết nối ADODB có đang mở không
- 3. Kết nối Bạn bè Để Kiểm tra Người dùng
- 4. Smack Client - Người dùng vẫn đang 'online' mặc dù kết nối bị hủy bỏ
- 5. Cách kiểm tra xem người dùng có được kết nối với internet wp7 không?
- 6. Cách kiểm tra xem người dùng Django vẫn chỉ đăng nhập từ phía máy khách?
- 7. Kiểm tra xem không có người dùng nào hiện đang đăng nhập vào Windows
- 8. ActionController :: LIve Có thể kiểm tra xem kết nối vẫn còn sống không?
- 9. Kiểm tra kết nối internet đang hoạt động Android
- 10. Cách kiểm tra xem người dùng có đang truy cập url gốc của trang web không?
- 11. signalR - nhận tên người dùng
- 12. Kiểm tra xem người dùng có đang sử dụng IE với chế độ tương thích
- 13. Cách kiểm tra xem có đang chạy trên chuỗi giao diện người dùng trong Android không?
- 14. Kiểm tra xem người dùng có đang cuộn bằng bàn di chuột không?
- 15. Kiểm tra xem người dùng mysql có tồn tại
- 16. Kiểm tra xem người dùng có ở trong nhóm
- 17. SignalR - OnConnect() ủy quyền - cách ngắt kết nối người dùng trái phép?
- 18. Kiểm tra kết nối WCF
- 19. Kiểm tra xem người dùng đã tồn tại trong drupal
- 20. Kiểm tra xem người dùng cụ thể có vai trò
- 21. Khách hàng SignalR với nhiều kết nối
- 22. người dùng được kết nối theo dõi tín hiệuR
- 23. Ngắt kết nối SignalR không được gọi là kết nối internet/kết nối lại
- 24. c3p0 Kiểm tra kết nối
- 25. SignalR .NET client ngắt kết nối
- 26. JBoss xem phiên người dùng đang hoạt động
- 27. SignalR kết nối/ngắt kết nối trung tâm thổi lên
- 28. Kiểm tra kết nối php/mysqli
- 29. Cách kiểm tra xem phần tử chọn vẫn còn "mở"/đang hoạt động với jquery
- 30. Kiểm tra kết nối FTP bằng Python
Tôi thấy điều này được đề cập ở những nơi khác, chỉ là hy vọng có một cách tốt hơn. Cảm ơn, tôi sẽ thử nó! – edobry
Có vấn đề gì với đồng thời với nhiều chủ đề cố truy cập vào tài nguyên đơn lẻ không? –
Không chỉ điều này sẽ không hoạt động đáng tin cậy vì mô hình trọn đời của một trung tâm, nó phá vỡ khả năng mở rộng quy mô này với một bảng nối đa năng. Câu trả lời thực sự duy nhất là theo dõi trạng thái trực tuyến trong bộ nhớ cache dùng chung như redis hoặc appfabric. – Bon