使用 socket.io 发出检测错误

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

我正在制作一个消息交换系统,我需要确保用户发送的消息是通过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,
          });
        } 
node.js socket.io
1个回答
0
投票

使用致谢,另请参阅示例。

您可以添加一个回调作为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();
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.