如何使用socket.io和节点构建私人聊天Messenger

问题描述 投票:1回答:1

我正在使用react-native节点和socket.io开发一个私人聊天Messenger应用程序,需要设置项目的结构和数据。互联网上似乎充满了许多不同的答案,我希望就这些解决方案所遇到的问题获得一些答案

据我从socket.io官方文档中了解https://socket.io/docs/rooms-and-namespaces/#Namespaces名称空间的目的是“通过在通信通道之间引入分隔来在应用程序中分隔关注点”,这听起来完全像我在不同对话之间创建分隔所需要的。

和房间“在每个名称空间中,您还可以定义套接字可以加入和离开的任意通道。”

这里是我想到的数据结构:

会话(名称空间)表-

id,名称空间,用户1,用户2

消息表-

conversationId,内容,来自(user1 / 2)

这里是我想到的一般流程:

步骤1-

用户连接主命名空间('/')

步骤2-

服务器从数据库中的对话表返回所有用户对话(名称空间)的列表

步骤3-

将用户连接到(全部?)他的名称空间(或者我应该只将他连接到他输入的对话吗?)

步骤4-

加入每个命名空间下的默认“聊天”室(在私人聊天应用程序中是否真的有此必要?例如,我在闲暇时间就知道这是有道理的,因为我们在不同渠道下与同一群人交谈,但是还有其他吗我所缺少的房间的优势?如果有必要,用户在应用程序首次触发时应该加入属于他的所有房间,还是应该只加入他进入的房间?]

步骤5-

当用户输入特定的对话时,他会获得此对话下的所有聊天记录(从数据库的Messages表中获得)>

步骤6-

添加新对话后,我们将记录添加到对话表中(并且我们向整个名称空间/房间发出'newConversation'事件,此事件现在仅包括发送者(我如何确保将新的通知发送给接收者,与他相关的名称空间应该将事件发送到主名称空间并验证对名称空间尝试的连接访问权,还是应该使用类似[[@)的解决方案)也许这超出了socket.io的范围,应该留给服务器处理? 步骤7-

发送新消息时,我们将其添加到消息表中,并向整个名称空间/房间发出'newMessage'事件

@

在许多地方,我看到了以下解决方案的一些版本:How to send a message to a particular client with socket.io这基本上建议存储一个有关每个用户与其套接字ID之间的字典,我不了解的是,每次用户刷新/登录/注销时,他收到一个新的套接字ID,而我们向其先前的套接字ID发出的所有事件都会现在迷路了我的预期结果是像whatsapp或facebook Messenger这样的聊天(但仅包含私人对话),即使您在主页上而不是在特定对话中,您也会收到其他对话中的消息通知

我正在使用react-native节点和socket.io开发一个私人聊天Messenger应用程序,需要设置项目的结构和数据。互联网似乎到处都是...

node.js socket.io chat
1个回答
0
投票
您知道了吗?我试图做同样的事情,但没有成功...
© www.soinside.com 2019 - 2024. All rights reserved.