Intereting Posts
Выполнение PhP Upload в PhP 5.4 не работает. Не заданы переменные сеанса PDO-версия mysql_num_rows ($ result) == 0) Нужен скрипт php для загрузки файла на удаленном сервере и сохранения локально Обновите php 5.5. * До php 5.6. * С помощью apt-get Html / php-страница кэшируется (клиентская сторона), когда она не должна быть Как создавать и использовать nonces Как создать собственный URL-адрес, основанный на выпадающем списке WordPress-form Сравнение поплавков в php Разница между возвращаемым значением выражения PHP и переменной Загрузите данные двоичного потока из браузера с помощью PHP с веб-службой «загруженный файл поврежден» переписать? id = __ в заголовок страницы, хранящийся в строке db Создание меню выбора в PHP по умолчанию, выбранному из MySQL db Результаты группы PHP / MySQL по столбцам Проект Zend Framework без использования Zend_Application Как пропустить некоторые поля из базы данных при использовании fputcsv

Как показать непрерывные обновления в реальном времени, такие как facebook ticker, домашняя страница meetup.com?

Как показать непрерывные обновления в реальном времени в браузере, например, facebook ticker, домашняя страница meetup.com? В python, PHP, node.js и каково влияние производительности на стороне сервера? Также как мы можем достичь того же самого обновления, если страница кэшируется CDN, например, akamai?

У вас есть два варианта (другие подробно описаны выше). В случае, если вы не знакомы с некоторыми концептуальными идеями, стоящими за каждым вариантом, я решил, что я расскажу им пару строк. Обратите внимание, что я представляю эти концепции на очень, очень высоком уровне.

Ваши три варианта:

  1. Краткосрочный опрос
  2. Веб-гнездо
  3. Комета / длинный опрос

Короткая опрос

Короткие опросы преодолевают одностороннюю связь между Client-Server, заставляя клиента непрерывно отправлять запросы серверу формы:

Client: Do you have a message for me? Server: No. Client: (wait x seconds) Client: Do you have a message for me? Server: No. Client: (wait x seconds) Client: Do you have a message for me? Server: Yes. Here it is! Client: Yay! Client: (update message) 

Постоянное ворчание от имени Клиента называется опросом . Чтобы реализовать эту структуру, вам нужно настроить сервер для «прослушивания» этих запросов опроса от клиента. Сервер также должен будет хранить эти сообщения где-нибудь, так что когда сообщения будут готовы, сервер может их доставить. На очень высоком упрощенном уровне вашему серверу необходимо:

  • Принять общие веб-запросы
  • Принять запросы опроса
  • Запуск фоновых заданий, которые извлекают сообщения
  • Храните эти сообщения где-нибудь, чтобы при поступлении запросов на опрос сервер мог проверить их.

Вам также потребуется связать эти запросы опроса с каким-либо идентификатором сеанса для пользователя, чтобы правильные сообщения дошли до нужного человека. В целом парадигма сложна и, на мой взгляд, неэффективна.

Веб-сокеты

Веб-сокеты являются новыми для HTML5. Основная идея заключается в том, что Клиент может поддерживать прямое подключение к серверу, и они могут передавать информацию друг другу взад и вперед. Поэтому вместо обычного: клиенты отправляют запрос GET >> Сервер отвечает содержимым, веб-сокеты позволяют поддерживать непрерывный диалог.

Однако, чтобы установить это, вам необходимо:

  • Браузеры, совместимые с WebSocket (не все).
  • Сервер, который может обрабатывать веб-сокеты (не уверен, как сформулировать это, но не все серверы настроены для такого рода договоренностей).

Настройка несколько сложна, хотя и проще, чем длительный опрос:

  • Клиент поддерживает соединение с подключением к серверу через Web-Socket
  • Сервер передает результаты клиенту через веб-сокет
  • Страница обновлений клиента по результатам

Вы увидите этот шаблон, называемый Push Notifications (конечно, если у вас есть iPhone, который вы испытали на этом), поскольку Сервер был уполномочен подталкивать «материал» клиенту (как невежливо!). Поскольку существует множество нюансов клиентов и серверов, я бы рекомендовал протестировать что-то вроде Pusher , которое в основном представляет собой веб-сервис для обработки всех жестких частей веб-сокетов. Это будет простой способ проверить и поиграть с шаблоном, прежде чем приступать к настройке самостоятельно. Он имеет как клиентские, так и серверные библиотеки.

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

Комета / длинный опрос

Альтернативным, казалось бы, кросс-браузерным подходом к веб-сокетам является Long-Polling (см. Comet ). В этом случае ваш клиент устанавливает соединение с сервером и оставляет его висящим, ожидая возврата данных. Настройка для этого несколько сложна, но она представляет собой среднюю площадку между коротким опросом и веб-сокетами .

Я бы предложил реализовать сокет, например, соединение с помощью SockJS или Socket.io в качестве библиотеки JavaScript на стороне клиента, а затем использовать Tornado на стороне сервера для публикации изменений состояния клиенту. Код довольно прост.

Клиентский код зависит от выбранной вами библиотеки. SockJS или SocketIO. Или, если вы просто хотите напрямую использовать Websockets, это очень просто:

 update_socket = new WebSocket("ws://my_server.com/listening_url"); update_socket.onmessage = function (evt) { $("#my_div").html(evt); }; 

Код на стороне сервера также довольно прост:

 import tornado class UpdateHandler(tornado.websocket.WebSocketHandler): def open(self): self.write_message('Hi client') # listen for some events that are occurring for message in function_that_generates_events(): self.write(message) def on_message(self, message): # Do something with incoming messages def on_close(self): # tidy up app = tornado.web.Application(('r/listening_url',UpdateHandler)) app.listen(9000) 

Вы можете использовать опрос, длительный опрос или если вы хотите систему push. Самый простой был бы опрос. Однако для всех решений требуется кодирование на стороне клиента.

Эффективность зависит от вашего решения. Проще всего реализовать опрос. Опрос с короткой частотой действительно выполняет запрос каждый, скажем, 100 мс, имитируя в реальном времени. Долгосрочный опрос будет иметь меньшее влияние, но в течение более или менее времени он будет откладывать много запросов.

пристань

Двигатель Ajax Push

Socket.io

Это способы реализации кометы

Я бы порекомендовал Socket.io, который реализован с помощью Node.js

потому что он использует наилучший доступный метод подключения