Tôi phát và nhận tất cả các tin nhắn với 1 quy trình công nhân IIS. Bump quá trình công nhân đến 2, tôi chỉ nhận được tất cả các tin nhắn khác (mất 50%). Có phải do thiết kế, cấu hình hoặc lỗi không?SignalR bị mất tin nhắn nếu IIS cấu hình với hơn 1 quy trình công nhân
Trả lời
Đây là theo thiết kế. Hai quy trình công nhân không chia sẻ trạng thái và khách hàng sẽ được phân phối giữa chúng trên cơ sở round-robin, có nghĩa là 50% sẽ kết nối với tiến trình A và 50% để xử lý B. Do bus thông báo SignalR nằm bên trong bộ nhớ mặc định, quy trình A không thấy thông báo từ quá trình B.
Cấu hình của bạn được gọi là "web garden" (không bị nhầm lẫn với "web farm") và thường được sử dụng để làm cho ứng dụng bị lỗi đáp ứng hơn (xem this SO question). Vì SignalR được xây dựng từ đầu với khả năng mở rộng trong tâm trí, cấu hình này sẽ không cung cấp cho bạn bất kỳ lợi ích nào.
Tôi đề nghị là để giữ cho các giới hạn quá trình công nhân tại 1.
Tuy nhiên có một cách để làm cho nó làm việc với vườn web: bạn cần phải sử dụng một xe buýt thông điệp bên ngoài như Redis hoặc Windows Azure Bus Service (chi tiết có thể được tìm thấy trong docs) để chia sẻ thông điệp giữa các quá trình, trong đó tất nhiên giới thiệu độ trễ mạng bổ sung.
Điều này chính xác trả lời câu hỏi của tôi. Tôi có vấn đề rò rỉ bộ nhớ và phải tái chế các nhóm ứng dụng định kỳ. Tôi chơi với vườn web để xem nó có giúp ích gì không. Cảm ơn. – Naptime
Vui lòng cập nhật câu trả lời này với liên kết trực tiếp tới tài liệu, có tại: http://www.asp.net/signalr/overview/performance/scaleout-in-signalr. Ngoài ra, tôi có một phản đối: Tôi không thích khuyến cáo để giữ giới hạn quy trình công nhân tại 1. Chắc chắn có lợi ích khi sử dụng nhiều hơn 1. Tài liệu này sẽ cho người dùng biết cách làm cho nó hoạt động với hơn 1 quy trình công nhân mà không hạn chế các lựa chọn của anh ta. – Icarus
@lcarus cảm ơn, tôi đã thêm liên kết trực tiếp. Tôi sẽ để lại lời khuyên của tôi về một quy trình công nhân. Trong khi một khu vườn web có một số lợi thế trong trường hợp sử dụng nhất định, đại đa số người dùng không cần một. –