質問:gevent-socketioとSocket.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の例は、私がよく知っているボトルアプリのようには見えません。また、ボトルの例は、実際にクライアントと通信する方法を示していません。)
ありがとう!:)