Как реализовать двойную связь между сервером и клиентом через http - PullRequest
3 голосов
/ 15 января 2011

У меня есть клиент AJAX, который должен получать сообщения с сервера. Некоторые сообщения с сервера не похожи на тип запроса-ответа. Например, игра с изображением, в которую могут войти игроки. Сервер должен отправить клиенту информацию о входе игрока. Но как сервер может отправить сообщение клиенту через http без запроса от клиента? Единственное решение, которое я могу изобрести: клиент отправляет запрос на сервер (запрос getNewPlayerEnter) с большим таймаутом, сервер проверяет состояние набора игроков, если в наборе есть новые игроки, то сервер отправляет информацию клиенту, если не сервер «спит» в течение некоторого времени и после «спящего» сервера проверяет, что игроки установили снова. Я думаю, что мое решение немного глупо (возможно, не мало). Как правильно это реализовать?
постскриптум извините за мой английский

Ответы [ 2 ]

5 голосов
/ 15 января 2011

То, что вы имеете в виду, это «опрос», когда ваш клиентский код будет каждые 10 секунд отправлять серверу запрос на проверку обновлений.

Это простое в реализации решение, поэтому вы видитеэто так часто.Тем не менее, лучшим решением является использование Comet.

В 2006 году Алекс Рассел ввел термин «Comet», чтобы определить метод, с помощью которого клиент делает HTTP-запрос к серверу, и сервер сохраняет это соединение открытым бесконечно.При этом открытом соединении сервер может затем отправить обновления клиенту в ответе при наличии обновлений.

Когда ответ получен, клиент немедленно открывает новое долговременное соединение HTTP.

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

Comet Daily предлагает несколько действительно замечательных демонстраций, от приложений чата доигры, которые используют комету.Если у вас есть такой инструмент, как Firebug или Chrome Debugger, вы можете наблюдать цикл ответа / запроса этих приложений в реальном времени.

http://cometdaily.com/2009/10/23/concrete-comet-examples/

0 голосов
/ 15 января 2011

Обычно это делается для того, чтобы клиент регулярно проверял связь с сервером (скажем, каждые 10 секунд).Если на сервере произошло изменение, оно отправляется обратно клиенту.Если изменений не было, либо отправляется пустой ответ, либо указывается какой-то код «без изменений».

...