Socket.io — как отправить сообщение в прослушивателе на стороне сервера

#node.js #sockets #socket.io

Вопрос:

У меня есть приложение, в котором на стороне клиента вы можете отправить некоторую информацию на сервер, он обработает информацию, а затем отправит сообщение обратно. Мой код таков:

 const express = require("express");
const app = express();
const http = require("http");
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server, {
  cors: {
    origin: "*",
    methods: ["GET", "POST", "PUT", "DELETE"]
  }
});

server.listen(3100, () => {
  console.log("listening on *:3100");
});


// CORS
app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  next();
});

io.on("connection", (socket) => {
  console.log("a user connected");

  socket.on("disconnect", () => {
    console.log("user disconnected");
  });

  socket.on("setUp", (data) => {
    //runs set-up functions
    console.log("Setting up! "   data); //This appears in the console perfectly
    
    io.emit("displayBasicText", "text");
  });

  socket.on("displayBasicText", (data, fn) => {
    console.log("Your message is: "   data); //This never runs after "setUp"
    io.emit("displayBasicText", data);
    fn("ack");
  });
});

 

Когда я выполняю «Настройку» на стороне клиента, прослушиватель на моем сервере будет выполнять console.log так, как он должен, и идеально выполнять все остальные функции. Однако консоль.вход в систему «displayBasicText» никогда не происходит, и клиент никогда не получает ответное сообщение.

Если клиентская сторона выдает «displayBasicText» напрямую-без прохождения настройки-то он также отлично работает и на консоли.журналы в полном порядке. Из-за этого я знаю, что либо «io.emit(«displayBasicText…)» не излучает, либо «displayBasicText» не прослушивает «Настройку».

Я заглянул в розетку.документация ввода — вывода, но изо всех сил пытался найти пример этого. Любой совет был бы очень признателен!!

РЕДАКТИРОВАТЬ: Я попробовал socket.emit(«displayBasicText», «текст») и io.sockets.emit(«displayBasicText», «текст») и получил тот же результат

Комментарии:

1. попробуйте использовать socket вместо io

2. К сожалению, это не сработало. Я также попробовал io.sockets.emit, и это тоже не сработало. Я включу это в исходный пост.

3. socket.emit("displayBasicText", "text"); и вам нужно будет добавить прослушиватель для displayBasicText кода на стороне клиента, прежде чем отправлять setUp

4. Привет, Джон! Я изменил его обратно на socket.emit с теми же результатами. У меня есть прослушиватель для displayBasicText на стороне клиента, и на самом деле, если вы используете displayBasicText напрямую (без прохождения настройки), он отлично работает. У меня просто возникают проблемы с отображением базового текста из настроек. Не могли бы вы дать какой-нибудь совет? Кстати, спасибо за комментарий!