Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Network
  • » Push-уведомления от веб-сервера к клиенту (десктоп) [RSS Feed]

#1 Фев. 2, 2013 20:05:19

ad3w
От: Hua Hin, Thailand
Зарегистрирован: 2012-01-27
Сообщения: 59
Репутация: +  4  -
Профиль   Отправить e-mail  

Push-уведомления от веб-сервера к клиенту (десктоп)

Добрый вечер!

Есть веб-сервис и desktop-приложение к нему на wxPython. Пользователь авторизуется через GUI и может работать с приложением. Но нужно сделать механизм отправки моментальных уведомлений с сервера клиенту. Как я понимаю, обычный long-polling. Сайт работает на django, но как я понимаю это не имеет значения, т. к. long-polling сервер будет работать на другой технологии.

Как я сейчас вижу работу этого механизма:

1. На сайте работает django, отправляет уведомления в rabbitmq, например.
2. Десктоп-клиент отправляет запрос на сервер, сервер не отдает ему ответа пока не прийдет нового уведомления.
3. Сервер получает новое сообщение из rabbitmq и закрывает соединение с клиентом.
4. Клиент выводит пользователю уведомление и снова обращается к серверу.

Вот хотел у вас посоветоваться, может кто такое делал - на каких технологиях лучше сделать? Все пишут по разному: gevent, tornado, socket.io, etc.

И как это лучше сделать на клиенте кроссплатформенно?

Заранее большое спасибо за помощь!



Офлайн

#2 Фев. 2, 2013 20:40:21

ad3w
От: Hua Hin, Thailand
Зарегистрирован: 2012-01-27
Сообщения: 59
Репутация: +  4  -
Профиль   Отправить e-mail  

Push-уведомления от веб-сервера к клиенту (десктоп)

Нашел пример для gevent:

import asyncore, socket
class HTTPClient(asyncore.dispatcher):
    def __init__(self, host, path):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect( (host, 80) )
        self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path
    def handle_connect(self):
        pass
    def handle_close(self):
        self.close()
    def handle_read(self):
        print self.recv(8192)
    def writable(self):
        return (len(self.buffer) > 0)
    def handle_write(self):
        sent = self.send(self.buffer)
        self.buffer = self.buffer[sent:]
client = HTTPClient('www.python.org', '/')
asyncore.loop()

+ скриптик, который в redis добавляет сообщения и клиент на asyncore. Насколько надежна такая связка?



Офлайн

#3 Фев. 2, 2013 20:40:52

ad3w
От: Hua Hin, Thailand
Зарегистрирован: 2012-01-27
Сообщения: 59
Репутация: +  4  -
Профиль   Отправить e-mail  

Push-уведомления от веб-сервера к клиенту (десктоп)

Планируется довольно большое количество одновременно подключенных клиентов.



Офлайн

#4 Фев. 12, 2013 13:05:38

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

Push-уведомления от веб-сервера к клиенту (десктоп)

Я делал так:
на сервере создаётся пул пользовтельских сессий в которых накапливаются события. Если клиент обратился на сервер и события есть, то клиент получает ответ сразу и соединение закрывается. Если событий в очереди нет, то соединение висит, ждёт.

Но: я это делал для js-клиента. У Вас клиент питоновский, может быть можно обратиться на некий серверный порт и слушать оттуда постоянно?



Офлайн

  • Начало
  • » Network
  • » Push-уведомления от веб-сервера к клиенту (десктоп)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version