2012-04-23 35 views
8

Giả sử kết nối mạng của tôi bị gián đoạn trong vài giây và tôi bỏ lỡ một số tin nhắn được đẩy bởi máy chủ SignalR.SignalR có thể xử lý các tin nhắn bị nhỡ không?

Khi tôi lấy lại kết nối mạng là các thư tôi đã bỏ lỡ bị mất? hoặc signalR xử lý chúng và đẩy chúng ra khi tôi kết nối lại?

Nếu không thể xử lý các thư bị nhỡ, thì cách tiếp cận được khuyến nghị để đảm bảo tính nhất quán là gì?

  • Thăm dò định kỳ (2-3 phút) để kiểm tra dữ liệu máy chủ?
  • Bằng cách nào đó phát hiện mất mạng ở phía máy khách và thực hiện cuộc gọi ajax để nhận dữ liệu về khôi phục mạng?
  • cái gì khác?

Trả lời

7

Dưới đây là một vài suy nghĩ:

Nếu bạn không gửi rất nhiều tin nhắn mỗi thứ hai, xem xét việc gửi không có dữ liệu trong các thông điệp bản thân. Thay vào đó, thông báo chỉ là một "ping" cho các khách hàng yêu cầu họ đi lấy dữ liệu máy chủ khi họ có thể. Kết hợp với một cuộc thăm dò định kỳ, như bạn đã nói, và bạn có thể yên tâm rằng bạn sẽ không bỏ lỡ tin nhắn. Họ chỉ có thể bị trì hoãn.

Nếu bạn đang gửi nhiều thư nhanh, cách thêm ID tuần tự cho từng thư? Hãy suy nghĩ về một cột SQL Identity. Khách hàng của bạn sẽ cần phải theo dõi ID mới nhất nhận được. Sau khi mạng kết nối lại, máy khách có thể yêu cầu tất cả các tin nhắn kể từ [ID cuối cùng]. Nếu nhận được tin nhắn có ID không tiếp giáp với lần nhận gần đây nhất, bạn biết rằng có một ngắt kết nối và có thể yêu cầu máy chủ cung cấp thông tin còn thiếu.

+1

Ý tưởng thú vị, tôi thích ý tưởng thứ hai, mặc dù sẽ rất tuyệt nếu SignalR bao bọc chức năng này cho chúng tôi ... có thể trong phiên bản sau tôi đoán! – reach4thelasers

+1

Tôi hiểu những gì bạn muốn, nhưng ý tưởng đằng sau nhắn tin là cháy và quên. Vì vậy, tôi không thấy điều này như là một phần cốt lõi của signalR. Tôi đồng ý với cách giải quyết @MikeC đề xuất như một tùy chọn tốt tho. –

+0

Chúng tôi có bất kỳ tùy chọn hoặc tính năng nào để bật và tắt như "Drop Message random" trong SignalR không? – Kurkula

Các vấn đề liên quan