2013-10-21 18 views
7

Làm việc với máy chủ WebSocket bằng Microsoft.Web.WebSockets.WebSocketHandler nơi tôi giữ các máy khách được kết nối trong một WebSocketCollection. Khi máy khách mất kết nối mạng của nó, tại máy chủ, các phương thức OnClose và OnError không được gọi. Ngoài ra, nhìn vào máy khách cụ thể trong bộ sưu tập cho thấy WebSocket.State của nó vẫn được mô tả là đã kết nối. Đây là trên IIS8.Trạng thái WebSocket của khách hàng không thay đổi về mất mạng

Ngắn gửi thủ công thư của khách hàng và tìm kiếm câu trả lời, có cách nào khác để xác định rằng khách hàng đã bỏ mạng không? Có một số cấu hình IIS tôi đang thiếu? Cảm ơn.

Trả lời

-1

Đây là TCP: khi bạn không gửi hoặc nhận, làm cách nào bạn có thể biết liệu người ngang hàng có còn ở đó hay không?

Nếu bạn giết quá trình ngang hàng hoặc khởi động lại máy, chồng của mạng của hệ điều hành của người ngang hàng đó thường sẽ chủ động đóng TCP, vì vậy bạn sẽ phát hiện ngay lập tức phát hiện WebSocket bị mất. Nhưng nếu bạn chỉ cần kéo các plug trên peer (quyền lực hoặc mạng) hoặc cái gì khác nghiêm trọng xảy ra, TCP không phải là đóng cửa tích cực.

Trong ngữ cảnh WebSocket, bạn có thể thực hiện các ping/pong cấp WebSocket (không biết nếu IIS hỗ trợ .. Ping ping/pong heartbeating) hay bạn có thể làm nhịp tim cấp ứng dụng bằng cách gửi tin nhắn WS nhỏ.

14

Tôi đã có thể giải quyết vấn đề của mình bằng hai bước. Đầu tiên, tôi chạy các lệnh sau tại dấu nhắc để chỉnh sửa cấu hình IIS.

cd \Windows\System32\inetsrv 
appcmd unlock config /section:system.webServer/websocket 

Sau đó, tôi đã cập nhật Web.config của mình bằng cách sau.

<system.webServer> 
    <webSocket enabled="true" pingInterval="00:00:05" /> 
<system.webServer /> 
+1

Đây là một câu trả lời tuyệt vời và thực sự giúp khi chẩn đoán một vấn đề với các kết nối SignalR Tôi đã có: Xem https://github.com/SignalR/SignalR/issues/3476#issuecomment-127209897 tuy nhiên 5s cảm thấy quá hung hăng . Giá trị này có tiếp tục hoạt động cho bạn trong thực tế không? – swl10

+0

Đối với tôi, nó chỉ là trong . Cuối cùng, máy chủ được ping trong khoảng thời gian gấp đôi = 8 giây. Đối với vai trò web trong Azure tôi đã có thêm Startup.cmd nhiệm vụ để ServiceDefinition.csdef: Startup.cmd: % SYSTEMROOT% \ System32 \ inetsrv \ appcmd mở khóa cấu hình /section:system.webServer/websocket –

+0

Cấu hình này có hoạt động khi lưu trữ SignalR trên dịch vụ windows chứ không phải IIS? – python

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