2012-02-28 4 views
13

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

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

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

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

Update:

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

ответ

8

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

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

https://gist.github.com/1939836

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

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

обновление:

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

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

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

обновление (01/2016):

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

https://github.com/andrewgodwin/channels

это, вероятно, будет частью Джанго 1.11 или 2.0

+0

THX для вашего ответа. Я должен избегать любой ценой ** опроса **. Клиент не должен запрашивать у Сервера новые обновления. Я обновляю свое первое сообщение со списком «возможных существующих реализаций», но я не уверен, какой из них можно использовать для моего дела. – Gero

+0

долгий опрос - это RealTime, вы просто отправляете ответ, когда это необходимо. Но у вас есть все, что нужно для общения между асинхронным сервером торнадо и django. Избегайте доступа к БД из торнадо, если вы используете django orm, он сделан из блокирующих вызовов. – christophe31

+0

Я только что прочитал rfc для долгого опроса, но мне придется идти с WebSockets. Нужна одна из многих реализаций, способных работать с django. – Gero

0

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

7

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

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

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

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