Минимальный пример микрофракции бутылок Python с использованием gevent-socketio и Socket.IO.js

Вопрос: Что было бы сопоставимым решением для примера в этой ссылке, кроме того, что реализовано с помощью gevent-socketio и Socket.io.js с bottle? Я ищу минимальное решение, которое просто передаст некоторый трафик в цикле от клиента к серверу и обратно к клиенту, используя gevent-socketio, Socket.io.js и бутылку.

Фон: Я разработал простое веб-приложение, которое предоставляет веб-терминал для удаленной пользовательской оболочки (cli) на сервере. Браузер (клиент) собирает команды оболочки из поля ввода формы, передает команду через веб-сокет на gevent.pywsgi.WSGIServer обработку запросов с помощью обработчика geventwebsocket.WebSocketHandler, который поставляет команду в оболочку, при асинхронном возврате вывода через сокет в поле textarea в форме в клиентском браузере. Это основано на большом, маленьком примере, представленном командой бутылок:

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 - это middlin '. В конечном счете, я ищу решение перекрестного броузера для передачи команд оболочки и вывода между клиентом и сервером. Если бы у меня был простой пример для бутылки, я думаю, что я мог бы двигаться вперед быстрее.

Кстати, я посмотрел на примеры gevent-socketio и даже a пример бутылки, но все эти примеры слишком отличаются от приведенного выше простого примера для того, чтобы сделать скачок в приложении. (Примеры gevent-socketio не похожи на приложения для бутылок, которые мне знакомы. И пример бутылки на самом деле не показывает, как общаться с клиентом.)

Спасибо!:)

Ответ 1

Circus! бегун процесса и наблюдатель, построенный поверх zmq, используйте флакон и сокет для веб-интерфейсов:

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

Исходный код достаточно прост, чтобы помочь вам приступить к созданию большего приложения с бутылкой и сокеткой.

В противном случае я советую вам перейти на sockjs! который представляет собой более общую реализацию с лучшей поддержкой для разных бэкэнд.

Этот другой поток может помочь вам: SockJS или Socket.IO? Стоит ли перекодировать страницу на основе ajax?