1

私は現在、1 ページのボトル ​​プロジェクトを使用していlocalhost:8080ます。

この質問の目的のために、単一ページは何でもなく、送信者の名前とメッセージの本文のみを含むチャットライン オブジェクトを Python から取得する基本的なショート ポーリング チャットであ​​ると仮定します。

これらのチャットライン オブジェクトはチャット オブジェクトに保存され、プロジェクトは複数のチャットを許可します。

チャットと送信者は URL によって決定されます。たとえば、チャットラインが から送信された場合、localhost:8080/chat/23/50送信者 50 としてチャット 23 に送信され、localhost:8080/chat/23/*チャット 23 のすべてのチャットラインが基本的なoverflow:autodiv に表示されます。

現在のショート ポーリング AJAX は、1 秒ごとに Python からデータを要求します。私は物事をよりリアルタイムにしたいと考えており、ロング ポーリングを使用することにしました (ただし、HTML5 WebSocket が好きなら、それらについても学ぶことを気にしません)。

私の質問は2つの部分に分かれています:

  1. できれば Python の Bottle モジュールを使用しながら、このようなチャット システムでロング ポール アプローチを実装するにはどうすればよいでしょうか?
  2. 次に、外部からアクセスできる実際のサーバー (つまり、ローカルホストからだけでなく) を介してプロジェクトを配信するにはどうすればよいでしょうか? LAN経由で利用できるようにしても良いでしょう。

ロング ポーリングが Apache などのサーバーで重大なパフォーマンスの問題を引き起こす可能性があることは承知しており、その事実を何らかの回答に織り込むことができれば幸いです。可能な限りスケーラブルなソリューションが必要です。

どんな助けでも大歓迎です!

4

2 に答える 2

2

私は最近、Python/サーバー側でgeventを、クライアント側でsocket.ioを最大限に活用したリアルタイム クライアント サーバー アプリケーションに関するプレゼンテーションに参加しました。講演者の Alexandre Bourget は、gevent-socketio モジュール ongithubをリリースしました。これを使用すると、すべての配管が簡単になります。

すべてが HTTP ロング ポーリングでのみ機能しました (ただし、socket.io には、HTML5 WebSocket または Flash ソケットに切り替えるためのすべてのロジックが含まれています)。フレームワークは Pyramid でしたが、Bottle でも動作するはずです。

于 2012-10-29T03:04:39.653 に答える
1

私自身は試していませんが、Tornado http://www.tornadoweb.org/と一緒にボトルを使用できると思います( Tornado - mount Bottle appを参照)。

Tornado ではロングポーリングが可能です。竜巻プロジェクトhttps://github.com/mrjoes/tornadioを見てください。

http://pypi.python.org/pypi/bottle-tornado-websocketにも興味があるかもしれません。私はこれを使用したことはありませんが、あなたが探しているもののように見えます.

Tornado のドキュメントには、本番環境での実行に関するセクションがあります: http://www.tornadoweb.org/documentation/overview.html#running-tornado-in-production

役立つことを願っています

于 2012-10-29T05:39:02.470 に答える