Jonathan Eun..
10
在对大多数浏览器进行简单,自然的Web套接字支持之前,以及在与Flask应用程序一起轻松集成之前,长轮询是一种合理的解决方法.但是在2013年中期,Web Socket支持已经走过了漫长的道路.
这是一个示例,类似于上面的示例,但集成了Flask和Web Sockets.它运行在gevent和gevent-websocket的服务器组件之上.
请注意,此示例并非旨在成为Web Socket杰作.它保留了很多lpoll结构,使它们更容易比较.但它立即提高了Web应用程序的响应能力,服务器开销和交互性.
Python 3.7+的更新
自最初回答5年以来,WebSocket变得更容易实现.从Python 3.7开始,异步操作已经成熟为主流实用性.Python Web应用程序是完美的用例.他们现在可以像JavaScript和Node.js一样使用异步,留下了"并发性"的一些怪癖和复杂性.特别是,请查看Quart.它保留了Flask的API以及与许多Flask扩展的兼容性,但是启用了异步.一个关键的副作用是WebSocket连接可以与HTTP连接并行地优雅地处理.例如:
from quart import Quart, websocket
app = Quart(__name__)
@app.route('/')
async def hello():
return 'hello'
@app.websocket('/ws')
async def ws():
while True:
await websocket.send('hello')
app.run()
Quart只是升级到Python 3.7的众多重要原因之一.