gpt4 book ai didi

node.js - 使用 Angular 和 Nodejs 的 Websocket : How to send data to specific client

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:17 25 4
gpt4 key购买 nike

我正在尝试将websocket.ionodejsAngular一起使用。我正在尝试构建一个一对一的聊天应用程序。这是我的代码片段:

server.js

 app.io.on('connection', function(socket){

console.info(`Client connected [id=${socket.id}]`);
socket.on('disconnect', function(){
console.info(`Client gone [id=${socket.id}]`);
});
});

sendmessage.js

router.post("/auth/sendMessage", function(req, res) {
//rest api to handle send message

//mongodb insert
app.io.emit('new-message', { message: message});
}

Angular 客户端

this.socket.on("new-message", function(data) {
if (
data.message.conversationId === self.conversationId &&
data.message.sender === "customer"
) {
self.messages.push(data.message);
setTimeout(function() {
self.messagesDiv.nativeElement.scrollTop =
self.messagesDiv.nativeElement.scrollHeight;
}, 100);
}
});

现在,我面临的问题是 new-message 将向所有监听器发送消息。虽然我在客户端处理逻辑,仅在消息由特定 conversationId 发送时才显示消息,但由于安全问题,这应该仅在服务器端处理。

因此,我希望能够仅发送给特定的用户。我认为这可以通过使用 socket.id 来完成,它对于每个连接都是唯一的。但是我如何将这个 socket.id 从客户端传递到服务器,以便服务器知道它需要在哪个客户端上发送数据?

最佳答案

这里有两个东西,app.iosocket。在第一个代码段中,您使用 app.io.on('connection', function(socket){。此 socket 是新连接。您可以将此套接字对象存储在数据库或内存中的某个位置。

现在,app.io.emit 会将消息发送给所有客户端,而您存储在某处的 socket 会将消息发送给 socket.emit 上的特定客户端/用户。

简而言之,你需要做

router.post("/auth/sendMessage", function(req, res) {
//rest api to handle send message

//mongodb insert
socket.emit('new-message', { message: message});
}

Here是我使用套接字制作的一个小型井字游戏。它将让您更深入地了解如何使用套接字。这并不完美,但您仍然会了解如何使用套接字。

tl;dr save socket from app.io.on('connection'...) 并使用 socket.emit 向该特定客户端发送消息。

关于node.js - 使用 Angular 和 Nodejs 的 Websocket : How to send data to specific client,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51346260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com