• flask python geventwebsocket实现websocket


    前端js逻辑:

    <html>
    <head></head>
    <body>
    <script type="text/javascript" src="http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></script>
    <script type="text/javascript">
    var sock = null;
    var wsuri = "ws://host:port/openapi/bigevent";
    
    window.onload = function() {
    
        console.log("onload");
    
        sock = new WebSocket(wsuri);
    
        sock.onopen = function() {
            console.log("connected to " + wsuri);
        }
    
        sock.onclose = function(e) {
            console.log("connection closed (" + e.code + ")");
        }
    
        sock.onerror = function(e) {
                    console.log("connection errored");
                }
    
        sock.onmessage = function(e) {
            $("#message").append('<p>' + e.data + '</p>')
            console.log(JSON.parse(e.data));
    }}
    
    </script>
    <h1>WebSocket Echo Test</h1>
    <div id="message" style="600px;height:300px;"></div>
    </body>
    </html>

    后端逻辑

    app.add_url_rule('/openapi/bigevent', view_func=big_event)
    # route_url: '/openapi/bigevent'
    def big_event():
        obj = {
            'recordsTotal': 0,
            'records': [],
            'errmsg': "",
            'errno': 0,
        }
        if request.environ.get('wsgi.websocket'):
            ws = request.environ['wsgi.websocket']
            if ws is None:
                abort(404)
            else:
                x = 0
                while True:
                    if not ws.closed:
                        db = mongo.cx[Config.ALFRED_MONGO_DBNAME]
    
                        filter = {"$and": [{"ts": {"$gt": "1532535132"}}, {"ts": {"$lte": "1532585532"}}]}
                        docs = db.big_event.find(filter, {"_id": 0})
    
                        big_event_list = list()
    
                        for doc in docs:
                            big_event = dict()
                            big_event_list.append(big_event)
    
                        obj['records'] = big_event_list
                        obj['recordsTotal'] = len(big_event_list)
                        ws.send(json.dumps(obj))
                        sleep(Config.BIGEVENT_PUSH_CYCLE)
                    else:
                        break
    # -*- coding: utf-8 -*
    from gevent.pywsgi import WSGIServer
    from geventwebsocket.handler import WebSocketHandler
    
    from poseidon.app import create_app
    from poseidon.settings import Config
    
    app = Flask(__name__)
    if __name__=='__main__':
        # app.run('0.0.0.0',port=8081)
        http_server = WSGIServer(('', 8081), app, handler_class=WebSocketHandler)
        http_server.serve_forever()
  • 相关阅读:
    优启通(UEFI版)重装系统
    Beta阶段项目总结
    第二个阶段团队绩效管理
    第二阶段冲刺10天 第十天
    第二阶段冲刺10天 第九天
    第二阶段冲刺10天 第八天
    第二阶段冲刺10天 第七天
    第二阶段冲刺10天 第六天
    第二阶段冲刺10天 第五天
    第二阶段冲刺10天 第四天
  • 原文地址:https://www.cnblogs.com/KnowledgeSky/p/9426710.html
Copyright © 2020-2023  润新知