Задержка на клиенте при закрытии события на стороне сервера

Используя сервер C#, я нашел эту простую реализацию для потоковой передачи содержимого сервера клиенту:

Response.ContentType = "text/event-stream";
while (Response.IsClientConnected)
{
     string myList= someDatabaseCall();
     Response.Write("{data:["+myList+"]}");
     Response.Flush();
     System.Threading.Thread.Sleep(interval);
}
Response.Close();

Итак, у меня есть календарь. Я выбираю дату, она вызывает мой веб-сервис для получения списка вещей на эту дату и отображает их. Затем в функции обратного вызова этого первого запроса я использую EventSource (я также пробовал Workers к тому же результату) для потоковой передачи одного и того же веб-сервиса (с другим методом, созданным с использованием вышеуказанного кода исключительно для потоковой передачи), чтобы периодически обновлять этот список. на случай, если все изменится.

updateMyList(response.data);
if(myEventSream)
{
    myEventStream.close();
    console.log("stream closed");
}
myEventStream = new EventSource("MyWebservice.aspx?action=streamData&date=" + selectedDate);
myEventStream.onmessage = function (response)
{
    updateMyList(response.data);
}

По большей части это все работает. Проблема в том, что когда я нажимаю, происходит заметная задержка между.close() и новым EventSource(). Если я устанавливаю логи в каждой строке клиента и перерывам на сервере, это занимает хорошие 10 секунд после того, как журнал показывает, что.close() выполнен, и сервер даже получает новый запрос (это не занимает много времени на первоначальный запрос). Также стоит отметить, что изменение.sleep(интервала) на сервере также не имеет большого значения.

Простите, что у меня нет достаточно конкретного вопроса, я не знаю достаточно о потоковых сервисах, чтобы знать, чего я еще не знаю.

0 ответов

Другие вопросы по тегам