C # 및 SignalR을 사용하여 실시간 클라이언트-서버 애플리케이션을 개발 중입니다. 가능한 한 빨리 클라이언트에게 메시지를 보내야합니다. 서버의 내 코드 :
for (int i = 0; i < totalRecords; i++)
{
hubContext.Clients.Client(clientList[c].Key).addMessage(
serverId, RecordsList[i].type + RecordsList[i].value);
Thread.Sleep(50);
}
지연이 50ms 이상이면 모든 것이 완벽하게 작동하지만 지연이 없거나 지연이 50ms 미만이면 일부 메시지가 누락됩니다. 지체없이 최대한 빨리 메시지를 보내야합니다. 메시지가 수신되었는지 확인하고 다른 메시지를 보낸 후에 만 확인해야한다고 생각합니다.
올바른 방법으로 수행하는 방법은 무엇입니까?
SignalR은 메시지 전달을 보장하지 않습니다. SignalR은 클라이언트 메서드를 호출 할 때 차단하지 않기 때문에 발견 한대로 매우 빠르게 클라이언트 메서드를 호출 할 수 있습니다. 안타깝게도 클라이언트는 메시지를 보낸 즉시 즉시 수신 할 준비가되어 있지 않을 수 있으므로 SignalR은 메시지를 버퍼링해야합니다.
일반적으로 SignalR은 클라이언트 당 최대 1000 개의 메시지를 버퍼링합니다. 클라이언트가 1000 개가 넘는 메시지보다 뒤처지면 메시지가 누락되기 시작합니다. 이 DefaultMessageBufferSize 1000을 늘릴 수 있지만 이렇게하면 SignalR의 메모리 사용량이 늘어나고 메시지 전달이 보장되지 않습니다.
http://www.asp.net/signalr/overview/signalr-20/performance-and-scaling/signalr-performance#tuning
메시지 전달을 보장하려면 직접 확인해야합니다. 제안한대로 이전 메시지가 확인 된 후에 만 메시지를 보낼 수 있습니다. 각 메시지에 대한 ACK 대기가 너무 느린 경우 한 번에 여러 메시지를 ACK 할 수도 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다