2012-08-04 3 views
10

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! :)

Antwort

2

Circus! der Prozess Läufer und Beobachter auf der ZMQ gebaut, benutzen Flasche und socketio für die Web-Schnittstellen:

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

Der Quellcode ist einfach genug, um Ihnen zu helfen eine größere App mit Flasche zu bauen, um loszulegen und Sockel.

Andernfalls rate ich Ihnen, zu sockjs zu verschieben! was eine generische Implementierung mit besserer Unterstützung für verschiedene Backends.

Dieser andere Thread können Ihnen helfen: SockJS or Socket.IO? Worth to recode ajax-based page?

+0

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

Verwandte Themen