Предполагая, что вы настроили конфигурацию пирамиды с config.include('pyramd_sockjs')
, а затем config.add_sockjs_route()
. общая трудность здесь заключается в том, чтобы выяснить, как получить доступ к текущим сеансам sockjs приложения. я имею в виду из трех сценариев:
- обычно вы реагируете на сообщения внутри вас собственный подкласс
pyramid_sockjs.session.Session
, как показано на chat example.
- радиовещательных сообщения от внутри одного из ваших взглядов так же просто позвонив по телефону
request.get_sockjs_manager().broadcast(some_message)
- Однако, если вы не ни внутри sockjs-messaging-, ни в HTTP-запрос цикл, как в вашем случае, вы должны прибегать к пирамиде
registry
, где все аддоны оставляют свои следы.
на minute 5 в видео можно было бы написать что-то вроде этого:
def listener():
r = redis.Redis()
r.subscribe(['foo'])
for msg in r.listen():
from pyramid.threadlocal import get_current_registry
get_current_registry().__sockjs_managers__[''].broadcast(msg)
объяснить выше хак:
get_current_registry
обычно discouraged, потому что это трудно проверить свой код. он возвращает текущий запрос или глобальный реестр - центральный основной компонент пирамиды.
- для
__sockjs_managers__
pyramid_sockjs должен был предоставить геттер в реестре, как и для request
.
- пустая строка по умолчанию
name
атрибут по pyramid_sockjs' (передать в кВт до add_sockjs_route
, чтобы изменить его)
, к сожалению, pyramid_sockjs не дает „номера“, но ваши сообщения будут транслироваться на всех подключенных клиентов без любых предшествующих фильтрующих механизмов. чтобы помочь вам в подклассе pyramid_sockjs.session.Session
и .SessionManager
. (скажите, пожалуйста!)