Flask的Barebones websocket扩展,使用Pythonthreading实现低流量并发
flask-threaded-sockets的Python项目详细描述
烧瓶螺纹套筒
为你的低流量瓶应用程序赤骨WebSockets。在
route
装饰器的简单用法:
fromflaskimportFlaskfromflask_threaded_socketsimportSockets,ThreadedWebsocketServerapp=Flask(__name__)sockets=Sockets(app)@sockets.route('/echo')defecho_socket(ws):whilenotws.closed:message=ws.receive()ws.send(message)@app.route('/')defhello():return'Hello World!'if__name__=="__main__":srv=ThreadedWebsocketServer("0.0.0.0",5000,app)srv.serve_forever()
Flask blueprints
的用法:
如果您使用Gevent、AsyncIO等,用Python提供WebSockets非常容易,现在如果您只想使用线程化的开发服务器,就很容易了。在
你为什么想要这个?在
这不应用于预期有大量请求的已部署web应用程序中!我们开发了这个库,用于低流量的物联网设备,这些设备得益于使用本机Python线程
几乎每个pythonwebsocket教程都会告诉您使用AsyncIO、Gevent、Tornado等异步库。对于几乎所有的应用程序,这是绝对正确的。这些异步库允许您以最小的开销处理大量并发请求,甚至像websockets这样的长时间运行的连接。在
在这些情况下,本机线程是非常不推荐的。大多数线程化生产服务器将使用一个小线程池来处理并发,而websockets将很快使这个池饱和。异步并发库通过允许处理几乎无限数量的并发请求来解决这个问题。在
使用本机线程而不冒着池饱和的风险的一种方法是为每个客户端生成一个线程per client,但是很明显可以看出这对于大型公共web应用程序是有问题的:每个客户端一个线程将很快导致本机线程数量不可行,从而带来巨大的上下文切换开销。在
但是,对于小型服务,例如本地WoT设备,这是绝对可以的。如果您只希望同时连接的数量很少(<;50),那么本机线程作为并发提供程序是完全可行的。此外,与大多数异步库不同,您可以轻松集成现有代码,而不必添加async
/await
关键字或monkey patch库。对于仪器控制,这是理想的。我们获得了Python线程的全部功能,以及它的同步原语,不加修改地使用现有的设备控制代码,而且不需要monkey补丁。在
安装
要安装烧瓶插座,只需:
pip install flask-threaded-sockets
WebSocket接口
传递到路由中的websocket接口与
gevent-websocket。
基本方法相当简单-
send
、receive
、send_frame
、和{
- 项目
标签: