Подтвердить что ты не робот

WebSocket + Django python WebService

Мне было интересно, как создать веб-службу django (отвечает XML) с помощью websockets. У меня уже есть django webservice, который принимает запросы xml, анализирует эти запросы, делает запрос к базе данных, создает ответ xml и отправляет этот xml обратно в запрос/браузер. Просто обычный HTTP-запрос XML, где ответ отображается как xml в браузере.

Но как мне теперь создать websocket django webservice? Допустим, я бы хотел отправить xml-ответ на запрос/браузер с последними данными из базы данных всякий раз, когда возникает новое волшебное событие.

Я читал много сообщений и блогов, но он был слишком общим. Могу ли я решить это только с помощью django + apache или мне нужно что-то еще рядом с django и другим сервером только для обработки веб-сайтов?

Я сейчас использую django 1.3, Apache + wsgi, но я был бы готов переключить любую конфигурацию, которая будет работать.

Update:

Существует много возможных веб-сайтов, http://pypi.python.org/pypi?:action=search&term=websocket&submit=search но какой из них можно использовать в моем случае?

4b9b3361

Ответ 1

Извините, но django обрабатывает запросы async очень плохо, так как это wsgi. Вы будете ограничены количеством параллельных экземпляров, если вам придется обрабатывать реальных пользователей. Лучшее решение - использовать торнадо или node.js.

Торнадо великолепно обрабатывает websocket и длительный опрос. Вот моя обертка, позволяющая получать пользователя и сеансы из параллельного потока торнадо:

https://gist.github.com/1939836

Он адаптировался из более сложного источника, я не тестировал этот метод, его длительный опрос, а также торнадо handlse WebSocket.

http://www.tornadoweb.org/documentation/websocket.html

обновление:

Избегайте django-websocket для использования в производстве. Даже главный разработчик рекомендует против него.

Я рекомендую Tornado, потому что это потрясающая технология, которая чертовски быстрее/легче, чем django. Это может быть полезно для некоторых простых случаев. Вам все равно нужно настроить apache/nginx, чтобы, по крайней мере, получить доступную "более быструю веб-страницу".

Django-Desktop-Notification фокусируется на браузере Chrome и требует node.js.

update (01/2016):

В конце 2015 года Mozilla предоставила django деньги для решения этой конкретной проблемы, текущая наиболее перспективная реализация, сделанная разработчиком ядра django, такова:

https://github.com/andrewgodwin/channels

Вероятно, это будет часть django 1.11 или 2.0

Ответ 2

Хотя это немного сложно настроить (но, вероятно, путь), вы можете использовать gunicorn + gevent + socket.io.

Я использовал эту статью, чтобы проложить путь через нее.

Вы также можете посмотреть события, отправленные сервером (указанная выше статья также рассматривает это). Если они соответствуют вашим потребностям, было бы немного легче настроить - поскольку вам не нужно настраивать socket.io, и вам не нужна клиентская библиотека. Один улов - SSE не поддерживаются в IE.

Ответ 3

Да, django не так уж и хорош, когда речь идет о асинхронных материалах. Моим советом для вас было бы использовать скрученный, поскольку у него много библиотек websocket. Если вам действительно нужно использовать django.., вы можете сделать django act просто как проход, для всех вещей api, которые вы создаете с использованием скрученных.