当前位置: 首页 > 知识库问答 >
问题:

如何处理套接字时的错误。io发出消息?

严峰
2023-03-14

我有发送消息的路由。消息首先保存在数据库中,然后广播给房间中的每个聊天订阅者。消息已成功保存,但服务器(节点/快递/打字稿)在命中 socket.io 实例时崩溃。错误是:

错误发送消息错误:回调不支持广播时,在BroadcastOperator.emit(/用户/Myname/桌面/代码/myapp/服务器/node_modules/socket.io/dist/broadcast-operator.js: 107:19)

路线是:

import { Response, Request } from "express";
import { ConversationControler } from "../../controllers/conversation";
import { SocketControler } from "../../controllers/socket";

interface SendMessage extends Request {
  body: {
    conversationName: string;
    userId: string;
    message: string;
  };
}

const sendMessage = async (req: SendMessage, res: Response): Promise<any> => {
  try {
    const { conversationName, userId,  message } = req.body;
    await ConversationControler.sendMessage(
      conversationName,
      userId,
      message
    );
    const io = req.app.locals.io;
    SocketControler.dispatchMessage(io, conversationName, message);
    return res.status(201)
  } catch (err) {
    throw new Error("error.send-message");
  }
};

export default sendMessage;

sendMessage函数是:

static dispatchMessage(
    io: Server,
    conversationName: string,
    message: string
  ) {
    return io
      .in(`chat@${conversationName}`)
      .emit("newMessage", message, (err: Error) => {
        if (err) {
          throw new Error("error.send-message");
        }
      });
  }

如果我删除回调,邮递员中的请求将永远运行。我让它,服务器崩溃。无论如何,消息都保存在数据库中。

如何解决此问题?

共有1个答案

江同化
2023-03-14

不支持广播回调时。只有当您向单个用户发射时,它才有效。

喜欢这个:

// client-side
socket.emit("update item", "1", { name: "updated" }, (response) => {
  console.log(response.status); // ok
});
 类似资料:
  • 我试图编写套接字错误处理(确切地说是错误111-连接拒绝),但什么也没有发生。终端打印错误号111发生,但它没有做任何事情: Traceback(最近的调用为last):文件“test.py”,第20行,在s.connect((IP,PORT))中文件“/usr/lib/python2.7/socket.py”,第224行,在meth返回getattr(self._sock,name)(*args

  • 我是一个初学者程序员,所以这很可能是显而易见的,我忽略了答案。但说到这个问题。 我有一个由两部分组成的程序(它比这个例子稍微复杂一点,但情况是一样的)。该程序在客户端和服务器之间触发了多条消息。我在服务器端有一个PrintWriter来向客户机发送消息,在客户机上有一个BufferedReader来读取发送的消息。当这个例子运行时,我得到了两行作为输出。第一个消息是两个消息,第二个消息是NULL。

  • 在Spring批处理中,对数据库的读写操作最多可完成31 000条记录。在31 000条记录之后,会出现以下异常: 即使我在Connection属性中引发了超时,我仍然会得到相同的异常。

  • 我有这个tcp插座 接受一条消息,将其转换为字符串并显示它,但是如果连接没有被客户端关闭,我就不能像预期的那样看到服务器上显示的消息 如何在不需要关闭客户端连接的情况下(由客户端)从客户端发送多条消息? 这里是NodeJs中的客户端 谢谢valeriano cossu

  • 我一直在开发一个简单的python套接字聊天室,客户端和服务器可以在其中相互发送消息。我遇到的问题是服务器和客户端一次只能发送一条消息。我希望它能像任何其他聊天室一样工作,在那里我可以在发送消息时收到消息,任何帮助都会有很大帮助

  • 问题内容: 大家好。我有一个使用ServerSocket和Socket类用Java编写的服务器。 我希望能够检测并处理断开连接,然后在必要时重新连接新客户端。 检测客户端断开连接,关闭套接字然后接受新客户端的正确步骤是什么? 问题答案: 大概是在从套接字读取数据,也许是在输入流上使用包装器,例如BufferedReader。在这种情况下,当相应的读取操作返回-1(对于原始read()调用)或为nu