ASP.NET SignalR은 ASP.NET 개발자를 위한 라이브러리로, 애플리케이션에 실시간 웹 기능을 추가하는 과정을 단순화합니다. 실시간 웹 기능은 서버가 클라이언트가 새 데이터를 요청할 때까지 기다리는 대신, 콘텐츠가 제공되는 즉시 연결된 클라이언트로 바로 전달할 수 있는 기능입니다.
ASP .NET SignalR은 ASP .NET 하의 클래스 라이브러리로, ASP .NET 웹 프로젝트에서 실시간 통신을 구현할 수 있습니다(즉, 클라이언트(웹 페이지)와 서버 측이 실시간으로 서로 알림을 주고받으며 메서드를 호출할 수 있습니다. SignalR은 세 가지 전송 모드를 제공합니다: 롱루핑(롱폴링), 웹소켓(HTML5 WEB 소켓), 포에버 프레임( 프레임을 숨기는 긴 요청 연결은 웹 클라이언트에서 명시적으로 지정할 수 있으며, 기본값이 채택된다면 기본으로(권장) 지정할 수 있습니다.SignalR은 브라우저 환경에 따라 적절한 전송 방식을 자동으로 선택합니다。
웹사이트 데이터 로딩이 너무 느리기 때문에, 데이터 패킷이 너무 크고 네트워크 요청이 적합하며, "ws"가 비어 있고, SignalR이 웹소켓 프로토콜을 사용하지 않는다는 점이 밝혀집니다.
로컬 디버깅을 해보니, 웹사이트가 WS 프로토콜을 정상적으로 사용할 수 있다는 것을 알게 되었습니다. 즉, 웹소켓과 정상적으로 통신할 수 있고, 서버와 로컬 네트워크 요청의 차이를 관찰할 수 있었고, 다음과 같습니다:
URL:http://ip/signalr/negotiate?clientProtocol=1.5&connectionData=%5B%7B%22name%22%3A%22positionvehiclehub%22%7D%5D&_=1555578162378
지역:
{"Url":"/signalr","ConnectionToken":"iX0gmz3XDJpQ62b6eiWK16Quaf+LFlD5aHw1k2oC6dKPz7naDuFmc0M7+xiR72ZjJDuNnMvfZyZF72qJK/4g6FOKAsY5C0uCfViOBXPRJVMBczOXTyCKcztIcugmcBq8" ,"ConnectionId":"50598ad3-b138-458c-a58d-b4f84d23c0e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":true," 프로토콜 버전":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} 서버:
{"Url":"/signalr","ConnectionToken":"4JbNUOp5/ju8Fljn29tCsFoTitZXk3XfF3tkuc/OYpaEQPawJHi3U1nTtjcJJzK4mVsOn9nAEECZj7h5732aV7tNJDgsasCon9uQwhqXZC5EAZPrAgASueApAjBCpPpE" ,"ConnectionId":"c46e67b1-4fb4-4345-983f-bf2c391d33e0","KeepAliveTimeout":20.0,"DisconnectTimeout":30.0,"ConnectionTimeout":110.0,"TryWebSockets":false," 프로토콜 버전":"1.5","TransportConnectTimeout":5.0,"LongPollDelay":0.0} 일부 파라미터는 원래 로컬 및 서버 파라미터와 달랐고, 저는 그것을 발견했습니다TryWebSocketsparameter, local은 true, server는 false입니다.
정보를 살펴보면, SignalR이 WebSocket 프로토콜을 사용할 경우 다음 조건들을 충족해야 함을 알 수 있습니다:
- ASP.NET 4.5
- IIS 8.0 (윈도우 서버 2012 또는 윈도우 8)
- 서버에서 WebSockets 기능이 활성화되어 있습니다
- 브라우저 WebSockets 지원
이건, 서버의 IIS 버전이 7.5라는 걸 알게 됐어요.WebSocket 프로토콜은 IIS 7.5에서 지원되지 않습니다。
참고 링크:하이퍼링크 로그인이 보입니다.
|