2012-02-28 4 views
13

私はdjango webservice(XMLで応答)をWebソケットで作成する方法を知りました。 私はすでにXMLリクエストを受け取り、それらのリクエストを解析し、データベースクエリを作成し、レスポンスXMLを作成し、そのXMLをリクエスタ/ブラウザに送り返すdjango webserviceを持っています。通常のHTTP XMLリクエスト。レスポンスはブラウザ内でxmlとして表示されます。WebSocket + Django python WebService

しかし、私は今どのようにwebsocket django webserviceを作成しますか?新しい魔法のイベントが発生するたびに、データベースからの最新のデータを使ってリクエスタ/ブラウザにXMLレスポンスを送信したいとします。

私は多くの投稿とブログを読んでいますが、あまりにも一般的すぎました。私はこれをdjango + apacheでしか解決できないのですか、それともdjangoとWebサーバーを扱うための別のサーバーが必要ですか?

私は現在、django 1.3、Apache + wsgiを使用していますが、動作する設定を切り替える準備ができています。

更新:

そこに多くの可能なWebSocketをは http://pypi.python.org/pypi?:action=search&term=websocket&submit=search 、そこにいるが、その一つが、私の場合に使用されるだろうか?

答えて

8

申し訳ありませんが、djangoは非同期要求をwsgiと同じように非常にあまりうまく処理しません。実際のユーザーを処理する必要がある場合は、並列インスタンス数によって制限されます。最高の解決策は、トルネードまたはnode.jsを使用することです。

竜巻はwebsocketと長いポーリングをうまく処理します。ここでは、並列竜巻のスレッドからのユーザーとのセッションを取得できるようにする私のラッパーです:

それは、より複雑なソースから適応されますhttps://gist.github.com/1939836

が、私はこの要旨をテストしていませんでしたが、それは長いポーリングですが、竜巻handlseのWebSocketにも。

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

更新:

生産用のジャンゴ - のWebSocketを避けてください。主な開発者でさえ、それを推奨します。

私は、djangoよりもはるかに速く/軽い素晴らしい技術だから、Tornadoをお勧めします。いくつかの単純なケースでは役に立つかもしれません。とにかくapache/nginxを設定する必要があります。少なくとも、「より速いWebページ」機能を利用できるようにしてください。

Django-Desktop-Notificationはクロムブラウザに焦点を当て、node.jsを必要とします。

更新(01/2016):Mozillaは、この特定の問題を解決するために、後半に2015年にDjangoのためにお金を与えた

、DjangoのコアDEVによる現在最もpromizingの実装はこの1つである:

それは非同期に詰め込むことになるとhttps://github.com/andrewgodwin/channels

それはおそらくジャンゴ1.11または2.0

+0

thxです。私はどんな費用**投票でも避けなければなりません**。クライアントはサーバーに新しい更新を要求してはいけません。私は "可能な既存の実装"のリストで私の最初の投稿を更新するが、私はそれらのどれが私の場合に使用できるかわからない。 – Gero

+0

長いポーリングは本当のRealTimeです。必要なときに答えるだけです。しかし、あなたは竜巻非同期サーバーとdjangoの間の通信を行うために必要なものすべてを持っています。あなたがdjango ormを使用している場合は、コールをブロックすることで、竜巻からDBへのアクセスを避けてください。 – christophe31

+0

私はちょうど長いポーリングにrfcを読んだが、私はWebSocketsと一緒に行かなければならない。 djangoとの連携が可能な多くの実装が必要です – Gero

0

の一部となりますうん、Djangoはすべてが素晴らしいではありません。あなたのための私の助言は、websocketライブラリがたくさんあるので、ねじれを使用することです。あなたが本当にdjangoを使用する必要があるなら... djangoをパススルーとして動作させることができます。

7

セットアップが少し複雑ですが(おそらく行く方法)、gunicorn + gevent + socket.ioを使用できます。

this articleを使って私の道を案内しました。

また、サーバーから送信されたイベントを見ることもできます(前述の記事も同様です)。あなたのニーズに合っていれば、セットアップが少し楽になります - あなたはsocket.ioを設定する必要はなく、クライアントライブラリは必要ありません。 SSEはIEではサポートされていません。あなたの答えは

関連する問題