2013-04-24 2 views
2

Я создаю приложение для пирамиды, используя pyramid_sockjs. Это приложение должно реагировать на входящие сообщения от redis pub/sub или rabbitmq. Где я должен подключить логику для прослушивания системы обмена сообщениями и реагировать, отправив сообщения клиентам sockjs?Как использовать обмен сообщениями с pyramid_sockjs?

Я нашел это link for socket.io, и я хотел бы сделать то же самое с sockjs и Pyramid.

ответ

0

Предполагая, что вы настроили конфигурацию пирамиды с config.include('pyramd_sockjs'), а затем config.add_sockjs_route(). общая трудность здесь заключается в том, чтобы выяснить, как получить доступ к текущим сеансам sockjs приложения. я имею в виду из трех сценариев:

  1. обычно вы реагируете на сообщения внутри вас собственный подкласс pyramid_sockjs.session.Session, как показано на chat example.
  2. радиовещательных сообщения от внутри одного из ваших взглядов так же просто позвонив по телефону request.get_sockjs_manager().broadcast(some_message)
  3. Однако, если вы не ни внутри 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. (скажите, пожалуйста!)

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

  • Нет связанных вопросов^_^