套接字IO默认房间

时间:2018-05-01 02:03:29

标签: socket.io flask-socketio

我想在Python中使用Web Socket创建一个实时通知中心。 我有一个功能,可以向特定用户发送/发送消息。

我已阅读有关套接字ID和空间的信息。我认为有两种方法可以使用Socket IO的两个功能进行直接用户交互。

第一

在文档中说,每个客户端/套接字都连接到套接字服务器,它们提供了一个唯一的套接字#id并加入了一个由id标识的房间。 我知道我不需要再为用户创建一个房间,只需使用这个默认房间。

enter image description here

通过使用这些,我想创建一个socket#id与userid(已记录的用户ID)的映射,并将其存储到redis中。就像,如果我想向用户ID发送消息,我只需要搜索它的socket #id。

  

第一种方式的问题是,socket #id是否相同   如果客户端断开连接并重新连接,则连接可以   建立?

第二

我已经阅读了很多关于使用空间直接留言的消息来源。对于连接的客户端或套接字,我只需要创建一个新客户,其id为客户端发送的用户ID(用户登录后)。

这种方式的优点是,如果用户对多个设备使用相同的用户ID,我可以将它们分组到一个房间。所以,如果我想通知所有设备,我只需要为id用户的房间发送消息。

  

这种方式的问题是,用户将被移离默认房间   从第一个方向或他们将在2个房间(1个默认,1个指定的房间   按用户ID)?

谢谢

2 个答案:

答案 0 :(得分:1)

这就是我这样做的方式

用户socketid在每个页面请求上都会有所不同,如果用户打开了3个选项卡,则每个选项卡上都会有不同的socketid,因此如果您希望用户在每个选项卡中获取通知,则需要发送该选项卡到3个socketids

这个解决方案是创建一个连接用户的对象,你可以将userid / username添加为你对象的一个​​键,并为这个用户创建一个包含所有socketid的数组,确保在用户断开连接时删除socketid当你想发送通知时,你只需循环遍历数组并发送给所有用户socketids

答案 1 :(得分:0)

  

第一种方法的问题是,如果客户端断开连接并重新连接,则套接字#id是否相同可以建立连接?

没有。每个连接都会获得一个随机分配的套接字ID。

  

这种方式的问题是,用户将从第一路转移到默认房间,或者它们将在2个房间(默认1个,用户ID指定1个房间)?

用户可以一次进入多个房间。如果您创建一个包含应用程序生成的用户ID的房间,然后将用户的所有套接字连接放入该房间,则每个客户端将位于两个房间中,一个与套接字ID匹配,另一个与您的用户匹配。 ID。然后,您可以单独向每个套接字或属于该用户的所有套接字发送消息。