Frage: Was für eine vergleichbare Lösung zum Beispiel bei this link, außer implementiert gevent-socketio und Socket.io.js mit bottle wäre? Ich bin auf der Suche nach der minimalen Lösung, die einfach einen Datenverkehr in einer Schleife vom Client zum Server und zurück zum Client mit gevent-socketio, Socket.io.js und bottle weiterleitet.minimal Beispiel für Python Flasche microframework mit GEVENT-socketio und Socket.IO.js
Hintergrund: Ich habe eine einfache Web-App entwickelt, die ein webbasiertes Terminal für eine entfernte benutzerdefinierte Shell (cli) auf dem Server bereitstellt. Der Browser (Client) sammelt Shell-Befehle aus einem Formulareingabefeld und übergibt den Befehl über einen Web-Socket an einen gevent.pywsgi.WSGIServer
, der die Anforderungen über den geventwebsocket.WebSocketHandler
-Handler verarbeitet, der den Befehl an die Shell liefert und asynchron die Ausgabe über den Socket an a zurückgibt Textfeld in einem Formular im Browser des Clients. Dies basiert auf einem großen, kleines Beispiel von der Flasche Team zur Verfügung gestellt:
http://bottlepy.org/docs/dev/async.html#finally-websockets
Sofern hier für Redundanz:
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>
Motivation: Meine vorhandene App funktioniert gut in der neuesten Version von Firefox und Chrome. IE-Unterstützung ist nicht vorhanden, und Safari-Kompatibilität ist Middl '. Ich suche letztlich nach einer Cross-Browswer-Lösung, um Shell-Befehle und die Ausgabe zwischen Client und Server zu kommunizieren. Wenn ich ein einfaches Beispiel für eine Flasche hätte, könnte ich schneller vorankommen.
Übrigens habe ich mir die gevent-socketio examples und sogar a bottle example angesehen, aber alle diese Beispiele sind zu verschieden von dem obigen einfachen Beispiel für mich, um den Sprung in der Anwendung zu machen. (Die gevent-socketio-Beispiele sehen nicht wie die Flaschen-Apps aus, die mir bekannt sind. Und das Flaschenbeispiel zeigt nicht, wie man mit dem Kunden kommuniziert.)
Vielen Dank! :)
Die nun gebrochen ausgebrachten Links sind. Die Dateien finden Sie hier: https://github.com/mozilla-services/circus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/circushttpd.py https: // github.com/mozilla-services/zirkus-web/blob/c850fcf453dd53680885833f3e0944577e90385b/circusweb/server.py – freakTheMighty