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的用法:

^{pr2}$

如果您使用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。 基本方法相当简单- sendreceivesend_frame、和{}。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Thymeleaf从循环到动作url获取变量   带有嵌入式jetty配置问题的java JAXR   java如何在firebase中存储每个键的所有值   java定义问题JPA有3个表和复合主键   循环Java 8:比较两个列表中的多个属性   java@inject在注入对象时似乎不起作用   餐厅场景中的java处理同步预订请求   java如何创建文件夹?   java异常启动筛选器struts2无法加载配置。行动   java如何从扫描仪获取多个整数输入,并将每个整数存储在单独的数组中?   java无法使用org获取DNS记录。xbill。DNS库   java RecycleView不会更新   java在将文本文件添加到StringBuffer后,有没有办法获取换行符?   如果按下home键或back键,java将停止以下活动