问题:除了使用this linkgevent-socketioSocket.io.js一起实现外,与bottle处的示例相比,什么是可比较的解决方案?我正在寻找一个最小的解决方案,它可以简单地通过一个循环将一些流量从客户机传递到服务器,然后使用gevent socketosi、socket.io.js和bottle返回到客户机。
背景:我开发了一个简单的Web应用程序,它为服务器上的远程自定义shell(cli)提供了一个基于Web的终端。浏览器(客户端)从表单输入字段收集shell命令,将命令通过Web套接字传递给gevent.pywsgi.WSGIServer处理程序,该处理程序将命令提供给shell,同时通过套接字将输出异步返回到客户端表单中的文本区域字段。S浏览器。这是基于瓶子团队提供的一个伟大的小例子:
http://bottlepy.org/docs/dev/async.html#finally-websockets
此处提供冗余:
示例\u 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:
<!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>

动机:我现有的应用程序在最新版本的火狐和Chrome中运行良好。IE支持不存在,Safari兼容性为middlin”。我最终会寻找一个交叉浏览解决方案来在客户机和服务器之间通信shell命令和输出。如果我有一个瓶子的简单例子,我想我可以更快地前进。
顺便说一下,我查看了gevent-socketio examples甚至a bottle example,但是所有这些示例与上面的简单示例都太不同了,我无法在应用程序中实现飞跃。(gevent sockatino的例子与我熟悉的瓶子应用程序完全不同。而且,瓶子的例子并没有实际展示如何与客户沟通。)
谢谢!:)

最佳答案

Circus!流程运行程序和观察程序构建在ZMQ之上,使用瓶子和插座作为Web界面:
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 or Socket.IO? Worth to recode ajax-based page?

08-27 23:11