flask-socketio 每个用户一个房间?昂贵的?

Posted

技术标签:

【中文标题】flask-socketio 每个用户一个房间?昂贵的?【英文标题】:flask-socketio one room per user ? expensive? 【发布时间】:2015-04-24 15:23:22 【问题描述】:

我有一个运行 pandas 的烧瓶 webapp 来在后端进行一些数据分析。

现在,我采用了一种天真的方法,即使用 AJAX 让用户将查询发送回服务器并与数据进行交互。但事实证明,每个请求都有很多开销,每次我需要将数据重新加载到熊猫/内存中,这是非常重复的。

我认为 socketio 在这里可能很有用 - 我会打开一个套接字连接,这样一旦文件加载到 pandas 中,用户就可以通过套接字以更少的开销更快速地交互和查询数据。

所以我现在的问题是:

我应该为每个用户打开一个房间,因为用户不需要相互交互吗? 这个规模 - 为每个用户打开一个房间吗? 命名空间在哪里适合?我是否将命名空间分配给网站的不同部分,并在每个命名空间下为每个用户进一步打开房间? 或者我应该生成一个猴子补丁线程吗?每位用户的 Greenlet?

【问题讨论】:

假设 1 个用户 = 1 个 websocket 连接并且您实际上正在使用 socket.io,您不需要在每次新用户连接时手动实例化一个新房间; socket.io 会自动为每个连接创建唯一的空间。 【参考方案1】:

为每个用户打开一个房间是一种有效的解决方案,我通常推荐它作为一种在服务器推送消息中轻松解决单个用户的方法。

房间保存在内存中的 Python 数据结构中,因此它们的成本很高,因为它们使用了一点内存。我没有测量每个用户的数量,但它可能只是房间名称顶部的几个字节。

命名空间用于将多个不同的连接多路复用到一个物理通道中。如果您只有一个连接,那么只需对所有内容使用相同的命名空间。例如,如果您的页面中有两个客户端应用程序(例如 Angular 应用程序),您应该使用多个命名空间,每个应用程序都有自己的一组事件处理程序。除此之外,没有理由使用多个命名空间。

希望这会有所帮助。

【讨论】:

以上是关于flask-socketio 每个用户一个房间?昂贵的?的主要内容,如果未能解决你的问题,请参考以下文章

没有关系的房间中的一对多关系

使用 Flask-SQLAlchemy 事件 API 广播到 Flask-SocketIO?

Socket.IO 在一个房间内多次发射(与 React.js 一起使用)

Flask-socketio,向另一个命名空间发出事件

如何使用集群处理 Socket.IO 房间?

WebRTC进阶流媒体服务器开发Mediasoup源码分析之Mediasoup主业务流程