2015-02-23 62 views
5

我有一个烧瓶webapp运行熊猫在后端做一些数据分析。flask-socketio每个用户一个房间?昂贵?

现在,我采取了使用AJAX的朴素方法,用户可以将查询发送回服务器并与数据交互。但事实证明,每次请求都有很多开销,每次我都需要将数据重新加载到非常重复的熊猫/内存中。

我在想socketio在这里可以很好用 - 我打开一个套接字连接,这样一旦文件被加载到熊猫中,用户可以通过套接字以更少的开销响应地交互和查询数据。

所以我的问题现在的问题是:

  • 我应该开辟为每个用户一个房间作为用户不需要彼此互动?
  • 这个比例 - 是否为每个用户开放一个房间?
  • 命名空间在哪里适合在这里?我是否将名称空间分配给网站的不同部分,并为每个用户进一步打开每个名称空间下的空间?
  • 或者我应该产卵猴子修补线程? Greenlet每个用户?
+0

假设1个用户= 1个websocket连接,并且实际上使用的是socket.io,则每次新用户连接时都不需要手动实例化新房间; socket.io自动为每个连接创建独特的空间。 – theaccordance 2015-02-26 22:49:53

回答

8

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

房间是在内存中的Python数据结构中保存的,所以它们只是使用一点点内存才是昂贵的。我没有测量每个用户的数量,但它可能只是房间名称上的几个字节。

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

希望这会有所帮助。

+0

完美。谢谢米格尔。你的书的大粉丝,博客帖子... – 2015-02-24 15:35:10