2013-05-20 10 views

Odpowiedz

6

Aby móc naciskać na klienta, musisz w jakiś sposób wdrożyć obsługę gniazd internetowych. Jeśli chcesz zachować go w Pythonie/kolby, jest to tutorial jak zrobić z gevent:

http://www.socketubs.org/2012/10/28/Websocket_with_flask_and_gevent.html

w tym artykule, Geoffrey wspomina również kompatybilny bibliotekę SocketIO dla Pythona/gevent które mogą umożliwić do korzystania z biblioteki JS klienta SocketIO, zwanej "gevent-socketio".

Może to zmniejszyć ilość pracy, którą musisz wykonać, pod względem zgodności z różnymi przeglądarkami, ponieważ SocketIO zrobił już to dużo.

Tu jest całkiem dobry tutorial jak używać SocketIO w angularjs tak że można powiadomić model angularjs gdy zdarzenie pochodzi z SocketIO:

http://www.html5rocks.com/en/tutorials/frameworks/angular-websockets/

Jeśli nie chcesz udostępniać w backendu sieciowym można szukać hostowanej usługi, takiej jak PubNub lub Pusher, a następnie zintegrować je z AngularJS jako usługą. Możesz komunikować się z tymi usługami za pośrednictwem aplikacji Python (gdy pojawi się powiadomienie SQS), a oni powiadomią o tym wszystkich podłączonych klientów.

2

Wiem, że jest trochę późno, ale zrobiłem dokładnie to, o co prosisz (choć bez Angulara).

skończyło się osobny proces uruchomiony serwer websocket nazwie Autobahn, który słucha Redis pub/gniazda sub, kod jest here on github

To pozwala na wysyłanie powiadomień push do klientów z prawie wszystko który może uzyskać dostęp do redisu.

Więc kiedy chcę opublikować wiadomość do wszystkich moich klientów powiązanych wystarczy użyć Redis tak:

r = redis.Redis() 
r.publish('broadcasts', "SOME MESSAGE") 

ten pracował dość dobrze do tej pory. Obecnie nie mogę wysłać powiadomienia wypychania do określonego klienta. Ale jeśli posiadasz system uwierzytelniania lub coś w celu identyfikacji konkretnego użytkownika, możesz powiązać go z otwartymi stronami internetowymi, a następnie wysłać wiadomości bezpośrednio do konkretnego klienta :-)

Możesz oczywiście użyć dowolnego serwera sieciowego lub klient (jak socket.io lub sock.js), ale zadziałało to dla mnie znakomicie :-)

Powiązane problemy