fin*_*oot 6 python wsgi websocket gevent flask
该问题应该可以通过以下两个最小示例重现:
最小的例子 app.run()
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello'
app.run()
Run Code Online (Sandbox Code Playgroud)
最小的例子 gevent.pywsgi.WSGIServer
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello'
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
前 5 行是相同的,因此两个示例仅在启动服务器的方式上有所不同。两台服务器都可以工作,我在浏览器中收到“Hello”。第一个示例打印:
* Serving Flask app "1" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [20/Jun/2019 23:43:15] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [20/Jun/2019 23:43:19] "GET / HTTP/1.1" 200 -
Run Code Online (Sandbox Code Playgroud)
因此,控制台输出显示了有关服务器处理的每个请求的一些信息。
但是,对于第二个示例,我不再在控制台中获得任何日志输出。如何为gevent.pywsgi.WSGIServer和启用日志记录WebSocketHandler?
背景(我认为这与问题无关)
我正在运行一个 Flask 应用程序,它使用flask_sockets. 因为
Werkzeug 开发服务器无法为 WSGI 环境提供 websocket 接口
我无法使用服务器,app.run()而我正在使用gevent.pywsgi.WSGIServer。我上面示例的代码直接取自https://github.com/heroku-python/flask-sockets 上的模块示例,未经任何修改。
日志记录的工作方式与gevent.pywsgi.WSGIServer. 它使用python 日志记录,并且更加复杂和灵活。
这是一个例子:
from gevent import pywsgi
from geventwebsocket.handler import WebSocketHandler
import logging
logging.basicConfig(level=logging.INFO)
server = pywsgi.WSGIServer(('127.0.0.1', 5000), app, handler_class=WebSocketHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
现在,无论您想要输出,您都可以执行以下操作:
logging.info("You can see me now...")
Run Code Online (Sandbox Code Playgroud)
如果您想查看 WSGIServer 的启动信息,请将日志级别设置为 DEBUG,您可以看到大量输出。
它应该像这样工作,但这是已经报告的模块WebSocketHandler中的错误:https: //gitlab.com/noppo/gevent-websocket/issues/16geventwebsocket
| 归档时间: |
|
| 查看次数: |
1974 次 |
| 最近记录: |