2011-12-24 8 views
4

Я довольно новичок в веб-разработке, поэтому извините мое невежество.Как заставить сервер говорить с клиентом

Что я хотел бы знать, если есть способ передать серверу сообщение клиентам. Примером этого может служить клиентская страница с лентой новостей, и каждый раз, когда на сервер приходит новая история, сервер отправляет эту информацию клиенту, а клиент обновляет ленту новостей своей страницы. Я не хочу, чтобы клиент постоянно проводил опрос сервера каждые несколько секунд, спрашивая: «Эй, есть ли новая история сейчас? А теперь, что теперь?» Я хочу, чтобы клиент делал свое дело, а затем прерывался сообщением с сервера.

Есть ли способ сделать это?

+1

Посмотрите WebSockets: https://developer.mozilla.org/en/WebSockets –

+0

Вы можете использовать AJAX для этого. – Virendra

+0

Вы можете проверить «Программирование кометы» ... Я также искал что-то похожее на ваш запрос на создание чат-приложения, но я не смог найти лучшего решения. – Songo

ответ

2

Для более новых браузеров вы можете использовать web sockets, чтобы открыть непрерывное соединение с сервером, а затем клиент/сервер может отправлять друг другу сообщения, когда захотят.

Для старых браузеров, как это обычно делается, клиент должен «опросить» сервер, чтобы запросить у сервера какое-то регулярное расписание, если на сервере есть новые сообщения. Обычно сервер не может напрямую подключаться к клиенту из-за брандмауэров, локальных параметров безопасности, неизвестного местоположения и т. Д., Поэтому клиент должен подключиться к серверу. Опрос может быть либо обычного сорта, либо опроса каждые 60 секунд с призывом ajax, чтобы спросить, есть ли что-то новое или это может быть более длинный опрос, когда клиент спрашивает, есть ли что-то новое, и если есть что-то новое, сервер немедленно возвращает данные. Но нет ничего нового, сервер зависает на запрос опроса в течение некоторого периода времени, ожидая, есть ли что-то новое. В конце концов, сервер либо вернет, что он ничего не имеет, либо вернется с новым сообщением, если он есть. Когда клиент получает ответ, он снова запускает последовательность «длинных опросов». Comet - пример «длинного опроса» в библиотечной форме, что упрощает его реализацию.

+0

Несмотря на то, что это довольно новый стандарт, возможно, лучшим вариантом является веб-образ. AJAX будет работать, но их запросы имеют гораздо большие накладные расходы. Это зависит от того, как часто сервер должен обновлять клиент. –

+0

@JeffreySweeney - Я согласен, что для этого типа проблем лучше использовать веб-сокеты, но я не вижу ни одной версии IE, которая ее поддерживает, поэтому вы застряли в реализации чего-то еще для IE. – jfriend00

+0

follow up: я несколько раз сталкивался с чем-то, называемым «jsonp», где (как я очень его понимаю) тег html запрашивает какой-то скрипт с некоторого сервера после указания функции обратного вызова, и сервер возвращает это функция обратного вызова с некоторыми данными в качестве параметра. Таким образом, не будет ли возможно, чтобы сервер вместо sorta сохранил функцию обратного вызова и продолжал возвращать ее клиенту всякий раз, когда захочет? – Robz

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