SignalR 클라이언트는 연결된 동안 서버에서 오는 메시지를 놓치지 않아야합니다. 긴 폴링을 사용하는 경우에는 그렇지 않습니다.SignalR - 긴 폴링을 사용하여 OnReconnected를 호출하지 않음
SignalR 1.1.2를 사용하는 간단한 허브 기반 애플리케이션이 있습니다. SSE를 사용할 때 네트워크 케이블이 연결 해제되어 있고 시간 초과 기간 내에 다시 연결되면 클라이언트와 서버 모두 다시 연결이 발생했다는 알림을받으며 알 수있는 한 메시지가 누락되지 않습니다. 긴 폴링을 사용하면 다음과 같이 나타납니다.
- 연결이 생성되면 ($ .connection.hub.start()) 허브에서 OnConnected 메서드가 호출되고 클라이언트가 연결된 상태가됩니다.
- 그런 다음 네트워크 케이블의 플러그를 뽑았다가 신속하게 다시 팝하면 OnDisconnected 또는 OnConnected에 대한 호출이 없습니다. 메시지가 누락되지 않습니다. 서버에서 대기중인 모든 메시지는 이후에 클라이언트로 전송됩니다. 지금까지 OK.
- 네트워크 케이블을 분리하고 긴 폴링이 만료되도록 설정하면 OnDisconnected가 호출됩니다. 클라이언트에는 상태 변경이 없습니다.
- 네트워크 케이블을 다시 연결하면 클라이언트에서 메시지 수신이 다시 시작됩니다. 클라이언트에게 연결이 끊어 졌음을 알리지는 않았지만 클라이언트는 일부 메시지를 놓쳤습니다. 서버에 OnReconnected 또는 OnConnected 호출이 없습니다.
이것은 버그입니까? 이 동작은 SSE와 긴 폴링간에 매우 다른 것처럼 보입니다. 클라이언트가이 시나리오에서 메시지를 놓치지 않도록 권장 전략이 있습니까? 서버에서 연결 ID를 추적하고 클라이언트에서 주기적으로 ping을 보낼 수 있습니다. OnDisconnected 후에 ping을 받으면 클라이언트에 다시 동기화하라는 메시지를 보낼 수 있지만이 작업은 올바른 작업이 아닌 것 같습니다. . 제안 사항이 있으십니까?