Android - 使用 parse 和 pubnub 在随机聊天应用程序中正确配对和连接两个用户
Android - correctly pairing and connecting two users in a random chat app using parse and pubnub
我目前正在创建一个随机聊天应用程序,用户按下一个按钮并与另一个用户配对,然后他们就可以聊天了。
我计划使用 Parse 进行用户控制和文件存储,并且用于聊天的 pubnub。
我的问题是,配对和连接两个用户并让他们一起聊天的正确方法是什么?
让我们说user1 按下搜索按钮开始搜索另一个用户,然后 user1 在解析数据库中的状态更新为 'searching',然后应用程序在数据库中查询另一个状态也是 'searching' 的用户。查询 returns user2 和一个新的聊天频道是从两个用户名组合在一起创建的(例如 Pubnub 聊天频道:'user1user2')。
User1 然后被放入这个聊天频道和聊天 activity 已开始。这是我感到困惑的地方,我的应用程序如何知道它需要让 user2 与 user1 聊天?因为根据我的想法,user2 也按下了搜索按钮来查询另一个用户的解析数据库,因此他们可以与另一个随机用户而不是 user1 聊天。
非常感谢任何有关实现此目标的正确方法的帮助。
这是一个很棒的用例。以下是有关如何开始使用此设计的一些见解。
设置
- 每个用户将被分配一个唯一的频道名称和一个唯一的 channel group,例如,分别为
ch_user123
和 cg_user123
。
- 将有三个 server managed 频道组,名称为
cg_idle
、cg_searching
、cg_active
。此频道组将包含未积极参与聊天且未搜索聊天伙伴的用户的所有唯一用户频道名称。
用户登录
当用户登录(成功)时,您的服务器会将该用户的唯一频道添加到频道组 idle
和用户的唯一频道组(IOW - 添加 ch_user123
到 cg_user123
到 cg_idle
搜索聊天伙伴
当用户点击搜索聊天伙伴按钮时,您的服务器应用程序将
- 从
cg_idle
频道组中删除他们的用户唯一频道
- 将他们的用户唯一频道添加到
cg_searching
频道组
list_channels
cg_idle
获取聊天伙伴候选人列表
- select
cg_idle
候选人列表中的一个用户频道
- 检查以确保 selected 候选人仍然 空闲
- 如果用户不再空闲,则他们处于活动状态或正在搜索 - 从空闲列表中选择另一个用户(需要再次列出
cg_idle
的频道以获得更新列表) - IOW,返回到 步骤 4
- 如果用户仍然空闲,请从
cg_idle
中删除该用户的频道并将其添加到 cg_active
- 从
cg_searching
中删除搜索用户的频道并将其添加到 cg_active
- 将新生成的频道名称(您可以使用UUID API 生成UUID 格式名称)添加到两个用户的唯一频道组。例如,将新频道名称
1234-5678-9ABC
添加到cg_user123
和cg_user456
。这两个用户没有订阅同一个频道来开始他们的聊天冒险。
- 您的服务器现在可以向这个新频道发布一条消息,向用户介绍彼此(您的客户端应用程序可以显示头像、用户信息,甚至 start the video stream if you are doing that)。
- 如果任一用户单击离开按钮,两个用户的唯一频道将从
cg_active
中删除,添加到 cg_idle
,并且共享聊天频道将从两个用户的唯一频道组中删除。
我可以想到上面需要解决的几个细节和功能以及您的服务可以控制的竞争条件,但这应该公开您可以如何使用频道组来控制用户的状态以及一种方式创建用户的名称目录。
我目前正在创建一个随机聊天应用程序,用户按下一个按钮并与另一个用户配对,然后他们就可以聊天了。
我计划使用 Parse 进行用户控制和文件存储,并且用于聊天的 pubnub。
我的问题是,配对和连接两个用户并让他们一起聊天的正确方法是什么?
让我们说user1 按下搜索按钮开始搜索另一个用户,然后 user1 在解析数据库中的状态更新为 'searching',然后应用程序在数据库中查询另一个状态也是 'searching' 的用户。查询 returns user2 和一个新的聊天频道是从两个用户名组合在一起创建的(例如 Pubnub 聊天频道:'user1user2')。
User1 然后被放入这个聊天频道和聊天 activity 已开始。这是我感到困惑的地方,我的应用程序如何知道它需要让 user2 与 user1 聊天?因为根据我的想法,user2 也按下了搜索按钮来查询另一个用户的解析数据库,因此他们可以与另一个随机用户而不是 user1 聊天。
非常感谢任何有关实现此目标的正确方法的帮助。
这是一个很棒的用例。以下是有关如何开始使用此设计的一些见解。
设置
- 每个用户将被分配一个唯一的频道名称和一个唯一的 channel group,例如,分别为
ch_user123
和cg_user123
。 - 将有三个 server managed 频道组,名称为
cg_idle
、cg_searching
、cg_active
。此频道组将包含未积极参与聊天且未搜索聊天伙伴的用户的所有唯一用户频道名称。
用户登录
当用户登录(成功)时,您的服务器会将该用户的唯一频道添加到频道组 idle
和用户的唯一频道组(IOW - 添加 ch_user123
到 cg_user123
到 cg_idle
搜索聊天伙伴
当用户点击搜索聊天伙伴按钮时,您的服务器应用程序将
- 从
cg_idle
频道组中删除他们的用户唯一频道 - 将他们的用户唯一频道添加到
cg_searching
频道组 list_channels
cg_idle
获取聊天伙伴候选人列表- select
cg_idle
候选人列表中的一个用户频道 - 检查以确保 selected 候选人仍然 空闲
- 如果用户不再空闲,则他们处于活动状态或正在搜索 - 从空闲列表中选择另一个用户(需要再次列出
cg_idle
的频道以获得更新列表) - IOW,返回到 步骤 4 - 如果用户仍然空闲,请从
cg_idle
中删除该用户的频道并将其添加到cg_active
- 从
cg_searching
中删除搜索用户的频道并将其添加到cg_active
- 将新生成的频道名称(您可以使用UUID API 生成UUID 格式名称)添加到两个用户的唯一频道组。例如,将新频道名称
1234-5678-9ABC
添加到cg_user123
和cg_user456
。这两个用户没有订阅同一个频道来开始他们的聊天冒险。 - 您的服务器现在可以向这个新频道发布一条消息,向用户介绍彼此(您的客户端应用程序可以显示头像、用户信息,甚至 start the video stream if you are doing that)。
- 如果任一用户单击离开按钮,两个用户的唯一频道将从
cg_active
中删除,添加到cg_idle
,并且共享聊天频道将从两个用户的唯一频道组中删除。
我可以想到上面需要解决的几个细节和功能以及您的服务可以控制的竞争条件,但这应该公开您可以如何使用频道组来控制用户的状态以及一种方式创建用户的名称目录。