Почему модуль C не получает событие ввода-вывода сокета «привет»?

#node.js #reactjs #express #socket.io

Вопрос:

Как вызвать другой модуль для другого пути сокета? Вот код сервера:

 require('dotenv-flow').config(); const express = require('express'); const app = express(); const http =require('http'); const httpServer= http.createServer(app); const io = require('socket.io')(httpServer);  let C=require('./C'); let c=new C(io.of("/c")); 
 class C {  constructor(socket) {  socket.on("connection",()=gt;{  console.log("Connection to /c");  });  socket.on("hi", (peerName, calllBack) =gt; {  console.log("Received say hi from "   peerName   ".");  });  } } module.exports = C; 

Код на стороне клиента:

 import { useEffect} from "react"; import io from "socket.io-client"; export default function TestSocket() {  useEffect(() =gt; {  let peerName;  let signalServerURL=process.env.REACT_APP_SOCKET_URL   "c";  let sUsrAg = navigator.userAgent;  if (sUsrAg.indexOf("Edg") gt; -1) {  peerName = "Edge";  } else {  if (sUsrAg.indexOf("Chrome") gt; -1) {  peerName = "Chrome";  } else {  if (sUsrAg.indexOf("Firefox") gt; -1) {  peerName = "Firefox";  } else {  if (sUsrAg.indexOf("Safari") gt; -1) {  peerName = "Safari";  }  }  }  }  let socket = io(signalServerURL, {  transports: ["websocket"],  });  socket.emit("hi", peerName, (response) =gt; {  console.log(response);  });  },[]);  return (  lt;gt;lt;/gt;  )  } 

Модуль C может получать событие «подключение», однако он не может получать событие «привет», почему? Кроме того, я хочу использовать другой модуль/класс для обработки другого пути к сокету.

напр.

for the path /b socket access, I want to use the module B to handle it.

для доступа к сокету path /d я хочу использовать модуль D для его обработки.

Как я могу это реализовать?

Согласно Philippe ответу, я изменил код сервера, как показано ниже:

 require('dotenv-flow').config(); const express = require('express'); const app = express(); const http =require('http'); const httpServer= http.createServer(app); const io = require('socket.io')(httpServer);  let C=require('./C'); let c=new C(io,"/c"); 
 class C {  constructor(io,path) {  io.of(path).on("connection",socket=gt;{  console.log("Connection to " path);    socket.on("hi", (peerName, calllBack) =gt; {  console.log("Received say hi from "   peerName   ".");  });  });  } } module.exports = C; 

Это работает!

Ответ №1:

При успешном подключении socket-io возвращает сокет, который вам нужно использовать. Вы можете попробовать что-то вроде:

 constructor(io) {  io.on("connection", (socket) =gt; {  console.log("Connection to /c "   socket.id);  socket.on("hi", (peerName, calllBack) =gt; {  console.log("Received say hi from "   peerName   ".");  });  }); }