Front-end JS logic:
<HTML><Head></Head><Body><Scripttype= "Text/javascript"src= "Http://libs.baidu.com/jquery/2.1.4/jquery.min.js"></Script><Scripttype= "Text/javascript">varsock= NULL;varWsuri= "ws://host:port/openapi/bigevent"; Window.onload= function() {Console.log ("onload"); Sock= NewWebSocket (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><DivID= "message"style= "width:600px;height:300px;"></Div></Body></HTML>
Back-end Logic
App.add_url_rule ('/openapi/bigevent', view_func=big_event)
#route_url: '/openapi/bigevent 'defbig_event (): obj= { 'Recordstotal': 0,'Records': [], 'errmsg':"", 'errno': 0,}ifRequest.environ.get ('Wsgi.websocket'): WS= request.environ['Wsgi.websocket'] ifWs isNone:abort (404) Else: x=0 whileTrue:if notws.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 () forDocinchdocs: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-* fromGevent.pywsgiImportWsgiserver fromGeventwebsocket.handlerImportWebsockethandler fromPoseidon.appImportCreate_app fromPoseidon.settingsImportConfigapp= 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 ()
Flask Python Geventwebsocket Implementation WebSocket