Вопрос: Что было бы сопоставимым решением для примера в этой ссылке, кроме того, что реализовано с помощью 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 не похожи на приложения для бутылок, которые мне знакомы. И пример бутылки на самом деле не показывает, как общаться с клиентом.)
Спасибо!:)