2013-05-19 28 views
5

Używam usługi autobahn do uruchamiania serwera sieci Web w celu uzupełnienia mojej aplikacji Django. Czasami muszę wysyłać wiadomości z Django na serwer websocket, który działa poprawnie przy użyciu modułu websocket-client. Chciałbym użyć protokołu WAMP, ponieważ interfejs RPC/PubSub wygląda świetnie, ale kod klienta Pythona jest zaimplementowany jako skręcony protokół i nie mogę wymyślić, jak go użyć, tj. Jak wywołanie funkcji, a nie z jakiejś zagranicznej pętli zdarzeń. Czy jest coś, czego nie widzę w dokumentach, czy też moja architektura powinna być inna?Klient imperatywny do automatycznego serwera WAMP?

+2

Wszystko w Pythonie jest konieczne. Myślę, że masz na myśli "blokowanie" lub "synchronicznie". –

+0

Jeśli chodzi o architekturę, istnieją (przynajmniej) 2 opcje: a) uruchomienie Autobahn jako oddzielnego serwera i uzyskanie dostępu jako klient z Django. b) uruchomić Django i Autobahn (serwer) w ramach jednego procesu. Jest przykład do robienia b) z Flask i Autobahn tutaj https://github.com/tavendo/AutobahnPython/blob/master/examples/websocket/echo_wsgi/server.py – oberstet

+0

@ Jean-PaulCalderone: Masz rację, ja chcę synchronicznego, blokującego połączenia. – Simon

Odpowiedz

5

https://github.com/itamarst/crochet może ci w tym pomóc.

+0

To wygląda bardzo obiecująco, dziękuję :-) – Simon

+0

Interesujące. I tak, używając tej biblioteki, możesz zrobić to, co chcesz: uruchom Autobahn (klient) w swojej aplikacji, ale blokuj (z POV aplikacji). – oberstet

+0

Czy nie jest możliwe utworzenie instancji i użycie klienta WAMP bez uruchamiania pętli zdarzeń? A może wymagałoby to stworzenia pełnowymiarowej implementacji "bez eventów" w dodatku do implementacji Twisted & asyncio? – Petri