Объединение веб-узлов и WSGI в приложении python
Я работаю над научным экспериментом, где около двух десятков тестировщиков играют в пошаговую игру с/против друг друга. Прямо сейчас это веб-приложение Python с интерфейсом WSGI. Я хотел бы увеличить удобство использования веб-сайтов: когда все игроки закончили свои очереди, я хотел бы уведомить всех клиентов об обновлении их статуса. Прямо сейчас, каждый должен либо ждать окончания таймаута, либо постоянно перезагружать и ждать, пока сообщение об ошибке "очередь все еще продолжается", чтобы не появляться снова (ожидание, эффективно).
Я прочитал документацию по библиотекам нескольких websocket, и я понимаю, как работают веб-узлы, но я не уверен в архитектуре для смешивания WSGI и websockets. Могу ли я иметь веб-сайты и WSGI-сервер в одном и том же процессе (и если это так, как, используя действительно любую библиотеку websockets) и просто вызывать my_websocket.send_message()
из обработчика WSGI, или я должен иметь отдельный сервер веб-серверов и делать некоторые IPC? Или я вообще не должен их смешивать?
, 6 месяцев спустя:. Я закончил процесс создания отдельного сервера веб-серверов (используя Autobahn) вместо того, чтобы интегрировать его с WSGI-сервером. Причина заключалась в том, что было намного проще и чище отделять их от двух, а разговор с сервером веб-серверов из процесса WSGI (связь между сервером и сервером) был прямым и работал с первой попытки, используя websocket-client.
Ответы
Ответ 1
Вот пример, который делает то, что вы хотите:
Он запускает веб-приложение WSGI (в данном случае это флэшка, но может быть любым WSGI-совместимым), а также сервер WebSocket под 1 сервером и 1 порт.
Вы можете отправлять сообщения WS из веб-обработчиков. Autobahn также предоставляет PubSub поверх WebSocket, что значительно упрощает отправку уведомлений (через WampServerProtocol.dispatch
), как в вашем случае.
Раскрытие информации: я являюсь автором Autobahn и работаю в Tavendo.