2015-09-10 2 views
0

Я узнал о длительном опросе и, немного прочитав об этом, немного запутался. Я посмотрел объяснения here и hereДлинный опрос путаницы

Я не совсем понимаю, в чем дело в том, чтобы засыпать сервер до ответа. Я знаю, что идея состоит в том, чтобы попытаться сохранить соединение открытым между клиентом и сервером, но во второй ссылке с наивысшим приоритетным примером php он имеет фрагмент кода, где сервер просто вызывает сон в течение некоторого времени.

<?php 
/* Send a string after a random number of seconds (2-10) */ 
sleep(rand(2,10)); 
echo("Hi! Have a random number: " . rand(1,10)); 
?> 

Что именно делает сон? Разве это не делает так, что каждый раз, когда вы отправляете запрос, он просто будет спать первым (что делает сервер ничего не делает), а затем отвечает, делая его точно таким же, как стандартный HTTP-запрос, но гораздо медленнее? Я не вижу, как это помогает поддерживать соединение, если сон просто заставляет сервер ничего не делать в течение некоторого времени. Не нужно ли длительному опросу отвечать клиенту при получении новой информации?

ответ

0

Длинный опрос о том, что сервер не отвечает до тех пор, пока новые данные не будут готовы к возврату клиенту (а не спать в течение фиксированной продолжительности времени).

Предположим, вам нужно получить новую информацию из службы. Возможны следующие варианты: Обычный опрос Клиент отправляет запрос через определенные промежутки времени и нуждается в новой информации. Это просто реализовать (и, возможно, просто по количеству параллельных подключений), но это означает: 1) вам нужно настроить интервал для вашего прецедента (как скоро вам понадобятся данные после его готовности), 2) вам нужно подождите (RTT + интервал задержки) для ваших данных, 3) имеется большое количество рукопожатий, которые имеют место

Длительный опрос Клиент отправляет запрос и ждет ответа. Поток сервера будет спать и будет уведомлен о доступных данных, после чего он вернет их как часть этого ответа. Это означает, что клиент будет иметь данные в RTT/2 раза после их доступности. Но серверу необходимо удержать еще много параллельных подключений.

+0

Я вижу. Но на сервере, если вы просто вызываете sleep (x), разве это не полностью остановит работу сервера в течение x времени? [link] (http://www.w3schools.com/php/func_misc_sleep.asp). Мы хотим, чтобы поток сервера спал и одновременно извлекал данные, которые мы хотим отправить клиенту? – user3125693

Смежные вопросы