Как уведомить браузер клиента о каком-либо событии на сервере? - PullRequest
3 голосов
/ 20 ноября 2011

Я использую Python (Tornado) на стороне сервера и немного JavaScript на стороне клиента.У меня общая ситуация - один пользователь отправляет сообщение другому.И я хочу, чтобы сервер уведомлял браузер клиента (получателя сообщения) о новом сообщении.Как мне это сделать?Должен ли я установить долгоживущее соединение с клиентом (возможно, с помощью веб-сокета) или что-то еще?

PS Для установления соединения через веб-сокет я нашел хорошую библиотеку TornadIO

PS2 Итак,из-за высокой загрузки проекта устанавливается соединение с сервером betwebb, и каждый клиент выглядит подозрительно.Я боюсь проблемы c10k.Может быть, это только недостаток моих знаний.

1 Ответ

1 голос
/ 20 ноября 2011

Я использую python (Tornado) на стороне сервера и некоторый javascript на стороне клиента. У меня общая ситуация - один пользователь отправляет сообщение другому. И я хочу, чтобы сервер уведомлял браузер клиента (получателя сообщения) о новом сообщении. Как мне это сделать? Должен ли я установить долгоживущее соединение с клиентом (возможно, с помощью веб-сокета) или что-то еще?

Использование веб-сервера реального времени, такого как Tornado - да. TornadIO выглядит хорошим решением, поскольку он использует socket.io, который имеет запасные варианты для старых браузеров.

Запись Википедии о проблемах C10k содержит список серверов, которые решили эту проблему:

Для решения проблемы C10K было разработано несколько веб-серверов:

  • nginx, использующий управляемую событиями (асинхронную) архитектуру вместо потоков для обработки запросов (WordPress.com использует nginx для решения проблемы C10K) [2]
  • Lighttpd, использующий асинхронную архитектуру для обработки запросов [3]
  • Чероки, легкий веб-сервер [4]
  • Tornado, неблокирующий веб-сервер и каркас веб-приложений [5], написанный на Python
  • Apache Deft, асинхронный, неблокирующий веб-сервер, работающий на JVM
  • JBoss Netty, клиент-серверная инфраструктура NIO, которая позволяет быстро и легко разрабатывать сетевые приложения, такие как серверы протоколов и клиенты [6]
  • Node.js, асинхронный неблокирующий веб-сервер, работающий на движке Google V8 JavaScript [7]
  • EventMachine, асинхронный неблокирующий веб-сервер, работающий на Ruby EventMachine
  • Yaws, веб-сервер, написанный на Erlang; получая прибыль от чрезвычайно легких процессов Эрланга.
  • Medusa, неблокирующая библиотека веб-сервера, написанная на Python

Как вы увидите, Торнадо числится в списке.

Помимо этого, ваш вопрос потенциально больше касается горизонтального масштабирования , чем вопроса о том, как получать уведомления от сервера к клиенту.

В зависимости от того, какое серверное решение реального времени вы выбираете, это может никогда не стать проблемой. Например, один экземпляр Caplin System Liberator может обеспечить более 10 000 постоянных соединений.

...