Я использую python (Tornado) на стороне сервера и некоторый javascript на стороне клиента. У меня общая ситуация - один пользователь отправляет сообщение другому. И я хочу, чтобы сервер уведомлял браузер клиента (приемник сообщения) о новом сообщении. Как мне это сделать? Должен ли я установить долгосрочное соединение с клиентом (возможно, с помощью websocket) или что-то еще?
Использование веб-сервера реального времени, такого как торнадо - да. TornadIO выглядит как хорошее решение, так как он будет использовать socket.io, у которого есть варианты резервного копирования для старых браузеров.
Wikipedia entry on the C10k issues предоставляет список серверов, которые эта проблема решена:
несколько веб-серверов, которые были разработаны для борьбы с проблемой C10K:
- Nginx, которая опирается на событийно (асинхронная) архитектура вместо потоков для обработки запросов (WordPress.com использует nginx для решения проблемы C10K) [2]
- Lighttpd, который опирается на асинхронную архитектуру для обработки запросов [3]
- Cherokee, легкий веб-сервер [4]
- Торнадо, неблокирующая рамки веб-сервер и веб-приложений [5] написана на Python
- Apache Deft, асинхронный без блокировки веб-сервер, работающий на JVM
- JBoss Netty, платформа клиентского сервера NIO, которая обеспечивает быструю и легкую разработку сетевых приложений, таких как серверы протоколов и клиенты [6]
- Node.js, асинхронный, неблокирующий веб-сервер, работающий на JavaScript-движке Google V8 [7 ]
- EventMachine, асинхронный, неблокирующий веб-сервер, работающий на Ruby EventMachine
- Yaws, веб-сервер, написанный в Эрланге; получая прибыль от чрезвычайно легких процессов Эрланга.
- Medusa, библиотека веб-сервер неблокирующая написанный в Python
Как вы увидите, Торнадо в списке.
Помимо этого, ваш вопрос потенциально больше о horizontal scaling, чем о том, как получить уведомления о сервере для клиентов.
В зависимости от того, какой из realtime server solution вы выберете это, возможно, никогда не станет проблемой. Например, один экземпляр Caplin System's Liberator может достичь гораздо более 10000 постоянных соединений.
См. Мой ответ здесь: http://stackoverflow.com/questions/3682198/writing-a-chat-application/3682211#3682211 (и другие ответы на тот же вопрос) – NullUserException
это хорошо, но у меня есть вопрос о кометы. Я боюсь ситуации, когда у пользователей 10k есть соединение, и после этого никто не может подключиться (проблема c10k) – dizpers
Если вы ожидаете, что многие пользователи подключатся к одному чат-серверу, у вас будет много других проблем, о которых стоит беспокоиться, кроме вашей базовой архитектуры – jwiscarson