2010-11-02 5 views
2

Я немного разбираюсь в WebSockets и был доволен тем, насколько легко было запустить сервер Tornado, который выполняет базовые подключения к веб-узлам. Я никогда не пользовался Tornado до сегодняшнего дня, и, хотя мне нравится то, что я видел, есть несколько вопросов, которые у меня есть относительно его использования.Связь с перекрестным соединением WebSocket (Tornado?)

Прежде всего, я использую WebSockets, чтобы у меня была небольшая коммуникация между двумя или несколькими клиентскими машинами. (В целях разговора давайте просто скажем, что это клиент чата). Очевидно, что я могу подключиться к серверу с нескольких компьютеров, и они могут все нажимать на сервер сообщения, и сервер может ответить, и это здорово! Но это не намного лучше, чем ваши стандартные запросы AJAX. Если у меня есть постоянное соединение, я хочу иметь возможность также передавать данные клиентам. Самый простой возможный сценарий - пользователь 1 отправляет сообщение на сервер, и после его получения сервер немедленно подталкивает его к пользователю. 2.

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

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

ответ

3

Вот чат-сервер с помощью смерча, WebSockets и Redis: https://gist.github.com/pelletier/532067 (Обновлены: ссылка фиксированной, спасибо @SamidhT)

+0

Замечательно! Это именно то, что я искал. Кажется очевидным теперь, когда я смотрю на код, но задним числом всегда 20/20, а? Кроме того, спасибо, что непреднамеренно указали мне на Redis, что было на самом деле следующим, что я собирался искать! (Хранилище данных на основе энергонезависимой памяти) – Toji

+0

старая ссылка мертва. Вот новый https://gist.github.com/pelletier/532067 –

+0

@SamidhT спасибо, я обновил встроенную ссылку. – kanaka

0

Хотя ответ уже был принят: Используя различные услуги по-прежнему кажется очень неэффективным меня. Почему бы вам просто не пойти с разделяемой памятью + условными переменными/семафорами? Похоже, что у вас есть стандартная проблема с потребителем-производителем

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