Вопрос:Что было бы сопоставимым решением с примером в этой ссылке , кроме реализованного с использованием gevent -socketio и Socket.io.js с бутылкой ? Я ищу минимальное решение, которое просто будет передавать некоторый трафик в цикле от клиента к серверу и обратно к клиенту, используя gevent -socketio, Socket.io.js и бутылку.
Фон:Я разработал простое веб--приложение, которое предоставляет веб-терминал -для удаленной пользовательской оболочки (cli )на сервере. Браузер (клиент )собирает команды оболочки из поля ввода формы, передает команду через веб-сокет -в gevent.pywsgi.WSGIServer
, обрабатывающий запросы через обработчик geventwebsocket.WebSocketHandler
, который передает команду оболочке., асинхронно возвращая вывод через сокет в поле textarea в форме в клиентском браузере. Это основано на замечательном маленьком примере, предоставленном командой разработчиков бутылок :
http://bottlepy.org/docs/dev/async.html#finally-websockets
. Предоставляется здесь для резервирования:
пример _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()
клиент.html:
Мотивация:Мое существующее приложение отлично работает в последних версиях Firefox и Chrome. Поддержка IE отсутствует -, а совместимость с Safari находится на среднем уровне. В конечном итоге я ищу решение для кросс-браузера -для обмена командами оболочки и вывода между клиентом и сервером. Думаю, если бы у меня был простой пример с бутылкой, я бы продвигался вперед быстрее.
Кстати, я посмотрел gevent -socketio examples и даже пример бутылки ,но все эти примеры слишком отличаются от приведенного выше простого примера, чтобы я мог сделать скачок в применении. (Примеры gevent -socketio совсем не похожи на приложения для бутылок, с которыми я знаком. И пример с бутылкой на самом деле не показывает, как общаться с клиентом.)
Спасибо!:)