我正在制作一个消息交换系统,我需要确保用户发送的消息是通过websocket发送的。
下面是套接字代码以及在数据库中创建消息后的代码。
socket.emit("send-msg", {
content,
friendsId,
userId,
receiverId,
});
const message = prisma.message.create({
data: {
content,
friendsId,
userId,
},
});
我需要确保 socket.emit 有效,以防止创建消息但未通过套接字发送消息。
这是用它执行的主要操作:
if (receiverUser !== undefined) {
io.to(receiverUser.socketId).emit("msg-recieve", {
userId,
friendsId,
content,
});
}
使用致谢,另请参阅示例。
您可以添加一个回调作为emit()的最后一个参数,这 一旦对方确认该事件,回调将被调用
因此,从客户端向服务器发送 ack,然后您可以将代码移至回调中,或者在出现错误和成功时调用单独的函数:
socket.timeout(5000).emit("send-msg", {
content,
friendsId,
userId,
receiverId,
}, (err, response) => {
if (err) {
// the client did not acknowledge the event in the given delay
handleError();
} else {
console.log(response);
/*
on client you'd need to return ack, for example:
socket.on('send-msg', (arg1, callback) => {
callback();
...
*/
doStuff();
}
});