#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 "."); }); }); }