bg 想要搞一个定时发送通知的(时间提醒)
服务器需要定时向browser推送数据,使用flask_socket
sockets = Sockets(app)
@sockets.route('/echo')
def echo_socket(ws):
while True:
message = ws.receive()
ws.send(message)
结果 chrome 调试的结果显示返回404 ,但是服务端没有报错信息
在Socket 的源码中,在socket的url_map写入环境时 加断点调试
def __call__(self, environ, start_response):
adapter = self.ws.url_map.bind_to_environ(environ)
import pdb; pdb.set_trace()
try:
handler, values = adapter.match()
environment = environ['wsgi.websocket'] // mark
with self.app.app_context():
with self.app.request_context(environ):
handler(environment, **values)
return []
except (NotFound, KeyError):
return self.wsgi_app(environ, start_response)
发现 代码中mark的那一行报错,keyerror , 百度了一下发现
It seems that Flask-Sockets does not provided a socket server so you either have to set up nginx to proxy web sockets, run your app using gunicorn or create a socket server yourself.
解决方法:
from geventwebsocket.handler import WebSocketHandler
from gevent.pywsgi import WSGIServer
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/api')
def api():
if request.environ.get('wsgi.websocket'):
ws = request.environ['wsgi.websocket']
while True:
message = ws.wait()
ws.send(message)
return
if __name__ == '__main__':
http_server = WSGIServer(('',5000), app, handler_class=WebSocketHandler)
http_server.serve_forever()
```