javascript - 如果socketIO生成的ID是自动生成的,如何在两个用户之间建立通信?

标签 javascript node.js express sockets socket.io

您好,希望您一切都好,我想问一个问题,我还无法得出答案。
在一个类(class)中,我看到要使用socketIO.js向特定用户发送消息,使用了to()方法,并将id作为参数,但是我怀疑,据我所知,id是由socketIO自动生成的了解,所以我想知道前端如何知道该ID?我在类(class)中看到的示例是从控制台执行的,然后将其直接发送到具有已知ID的方法,那么该示例不是那么真实,我想知道的是它本身如何执行一对一聊天(如果ID是由套接字自动生成的)?我不知道我是否理解。
例如,要开始与另一个用户的对话,您可以单击一个按钮,触发发出事件的事件,发送编写用户的ID,该事件应使用套接字触发后端,但是我的问题是感觉像谁发送邮件?首次在2个用户之间建立通信时,您如何知道将发送给谁的ID?显然,这必须由frontent作为参数发送,但前端又如何给出将其发送给谁的ID?我不知道您是否可以在数据库中存储用户的固定套接字ID,或者可以将您的DB ID与套接字一起使用?比一切还多的是我无法推断的将如何完成?
我不知道我是否对这个问题了解得更多,还不止于此,我不知道它如何获取或分配发送消息的目标的ID,以及是否可以将其固定并存储在db中或是否存在任何方法都可以。
预先感谢您的回应,以及与我分享的任何资源,或者如果您推荐与之相关的类(class),我将非常感谢。
例如,我有这种方法

io.on('connection', (client) => {    
client.on('privateMessage', (data)=>{
            const person = user.getPersona(client.id) //get this 
            client.broadcast.to(data.para).emit('privateMessage', createMsj( person.name, data.messages));
        
        });
}
但是接收消息的人的前端将消息传递给方法在哪里?

最佳答案

前端将不知道任何其他客户端的socket.io id。这是您的服务器需要参与的地方。
您的每个用户大概都有一些用户名,这些用户名显示在客户端UI中,这是其他客户端知道他们的名称。
因此,您的服务器需要在用户名和socket.io clientID之间保持映射。因此,用户可以向您的服务器发送请求以连接到BobS。然后,您的服务器需要能够查找BobS,确定该用户当前是否已连接,如果已连接,那么它们的socket.id值是多少。这样,您的服务器可以方便地连接两个用户。
该映射通常不会保存在永久性存储区(例如数据库)中,因为socket.id是一个 transient 值,仅在该客户端的socket.io连接持续时间内有效。因此,通常将其保存在某种Javascript数据结构中(例如Map对象)。

关于javascript - 如果socketIO生成的ID是自动生成的,如何在两个用户之间建立通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64253499/

相关文章:

javascript - 从 Mozilla 插件在终端/命令提示符中执行系统命令

javascript - AngularJs:如何对指令创建的动态元素应用表单验证

javascript - 处理单击并悬停在同一元素上并保持弹出模式打开,直到弹出模式悬停在上方

node.js - 订阅者重启时zmq订阅者无法接收消息

html - : express + jade/ejs + html5 + css + websockets 的逻辑是什么

SQL 查询为 SQLite 返回 JSON 中的嵌套对象数组

javascript - 如何使用 Bootstrap 切换被单击的元素并隐藏所有其他元素?

javascript - 使用 POST (AWS4) 和获取的基于 AWS S3 浏览器的上传

javascript - 一个查询即可找到具有一个引用的每个子项

javascript - Redis连接关闭