小编Nam*_*man的帖子

SocketIO 发送给特定用户(无需为每个客户端使用单独的空间)

我正在尝试开发一个支持后端长任务的网络应用程序。我在我的服务器上使用flask-socketio包和芹菜。我的工作流程如下:

  1. 当客户端打开 Html 页面时,我启动到服务器的套接字连接,该连接为用户创建一个 uid 并将其发回。
  2. 现在,一旦用户发布了对长任务的请求——我使用 celery 来安排它,一旦完成,我需要将其发送给发布请求的用户。(我在post请求中存储了相关的userid)

我查看了 @Miguels 对39423646/flask-socketio-emit-to-specific-user的回答,它为每个用户创建一个单独的房间,然后在该房间上广播消息。但我想问是否有其他更简单的方法来做到这一点,因为它似乎效率低下或强制的方式来做到这一点。

我还遇到了nodejs解决方案(how-to-send-a-message-to-a-preferred-client-with-socket-io),我觉得这是实现这一目标的更自然的方式。python-socketio 中也有类似的解决方案吗?


更新:经过更多搜索后,我在 github gist 上发现了以下解决方案。据此 -- ** flash-socketIO 已经将所有客户端放在request.sid** 指定的单独房间中。

我仍然希望讨论其他方法来做到这一点。具体来说,如果网站流量相当高,是否会导致房间过多?


更新(2)我当前的(工作)服务器代码使用 rooms这是从flask-SocketIO celery示例借用并修改的

@celery.task(bind=True)
def long_task(self, userid, url):
    # LONG TASK
    time.sleep(10)
    # meta = some result
    post(url, json=meta) 
    # It seems i can't directly emit from celery function so I mimic a post request and emit from that …
Run Code Online (Sandbox Code Playgroud)

python socket.io flask-socketio python-socketio

4
推荐指数
1
解决办法
2040
查看次数