您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Flask中的Websocket

Flask中的Websocket

在常规HTTP请求中,客户端和服务器之间的连接是短暂的,客户端连接到服务器,发送请求,接收响应,然后关闭连接。在此模型中,服务器可以使用少量工作程序为大量客户端提供服务。在这种情况下,并发模型通常基于线程,进程或两者的组合。

使用websocket时,问题更加复杂,因为websocket连接长时间处于打开状态,因此服务器无法使用一小部分工作人员来服务大量客户端,每个客户端都需要拥有自己的专用工作人员。如果您使用线程和/或进程,则您的应用将无法扩展以支持大量客户端,因为您不能拥有大量线程/进程。

这是gevent输入图片的地方。Gevent有一个基于greenlets的并发模型,它的可扩展性比线程/进程好得多。因此,由于greenlets的轻量级特性,通过基于gevent的服务器为websocket连接提供服务可支持更多客户端。使用uWSGI,您可以选择与Web套接字一起使用的并发模型,其中包括gevent中基于greenlet的模型。如果需要,您也可以独立使用gevent的Web服务器。

但是请注意,gevent对Web套接字一无所知,它只是一台服务器。要使用websocket连接,您必须添加websocket服务器的实现。

Flask有两个扩展,可简化websocket的使用。Kenneth Reitz的Flask- Sockets扩展是gevent和gevent- websocket的包装。该烧瓶SocketIO后缀(我是作者无耻插头)是GEVENT和GEVENT- socketio在服务器上的包装,加上Socket.IO客户端上。Socket.IO是更高级别的套接字协议,可以使用Web套接字(如果可用),但也可以在较旧的浏览器上使用其他传输机制。

我希望这有帮助!

Python 2022/1/1 18:46:52 有351人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶