10

質問:gevent-socketioSocket.io.jsボトルで使用して実装した場合を除いて、このリンク の例に匹敵するソリューションは何でしょうか?gevent-socketio、Socket.io.js、bottleを使用して、クライアントからサーバーにループでトラフィックを渡し、クライアントに戻す最小限のソリューションを探しています。

背景:サーバー上のリモートカスタムシェル(cli)用のWebベースのターミナルを提供する単純なWebアプリを開発しました。ブラウザ(クライアント)はフォーム入力フィールドからシェルコマンドを収集し、Webソケットを介してコマンドをハンドラーgevent.pywsgi.WSGIServerを介して処理に渡します。geventwebsocket.WebSocketHandlerハンドラーはコマンドをシェルに提供し、ソケットを介して出力をテキストエリアフィールドに非同期的に返します。クライアントのブラウザのフォームで。これは、ボトルチームによって提供された素晴らしい小さな例に基づいています。

http://bottlepy.org/docs/dev/async.html#finally-websockets

冗長性のためにここに提供されます:

example_server.py

from bottle import request, Bottle, abort
app = Bottle()

@app.route('/websocket')
def handle_websocket():
    wsock = request.environ.get('wsgi.websocket')
    if not wsock:
        abort(400, 'Expected WebSocket request.')

    while True:
        try:
            message = wsock.receive()
            wsock.send("Your message was: %r" % message)
        except WebSocketError:
            break

from gevent.pywsgi import WSGIServer
from geventwebsocket import WebSocketHandler, WebSocketError
server = WSGIServer(("0.0.0.0", 8080), app,
                    handler_class=WebSocketHandler)
server.serve_forever()

client.html

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript">
    var ws = new WebSocket("ws://example.com:8080/websocket");
    ws.onopen = function() {
        ws.send("Hello, world");
    };
    ws.onmessage = function (evt) {
        alert(evt.data);
    };
  </script>
</head>
</html>

動機: 私の既存のアプリは、FirefoxとChromeの最新バージョンでうまく機能します。IEのサポートは存在せず、Safariとの互換性は中途半端です。私は最終的に、クライアントとサーバー間でシェルコマンドと出力を通信するためのクロスブラウザーソリューションを探しています。ボトルの簡単な例があれば、もっと早く進むことができると思います。

ちなみに、gevent-socketioの例、さらにはボトルの例を見ましたが、これらの例はすべて、上記の単純な例とはあまりにも異なっているため、アプリケーションを飛躍させることはできません。(gevent-socketioの例は、私がよく知っているボトルアプリのようには見えません。また、ボトルの例は、実際にクライアントと通信する方法を示していません。)

ありがとう!:)

4

1 に答える 1

1

サーカス!zmq の上に構築されたプロセス ランナーとウォッチャーは、Web インターフェースに bottle と socketio を使用します。

https://github.com/mozilla-services/circus/blob/master/circus/web/circushttpd.py https://github.com/mozilla-services/circus/blob/master/circus/web/server.py

ソース コードは、ボトルと socketio を使用してより大きなアプリの構築を開始するのに役立つほど単純です。

それ以外の場合は、 sockjsに移行することをお勧めします! これは、さまざまなバックエンドをより適切にサポートする、より一般的な実装です。

この他のスレッドはあなたを助けることができます: SockJS または Socket.IO? ajax ベースのページを再コーディングする価値はありますか?

于 2012-09-30T13:40:43.970 に答える