为什么模块C收不到socket io "hi"事件?
Why the module C does not receive the socket io "hi" event?
如何为不同的套接字路径调用不同的模块?
这是服务器代码:
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",()=>{
console.log("Connection to /c");
});
socket.on("hi", (peerName, calllBack) => {
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(() => {
let peerName;
let signalServerURL=process.env.REACT_APP_SOCKET_URL + "c";
let sUsrAg = navigator.userAgent;
if (sUsrAg.indexOf("Edg") > -1) {
peerName = "Edge";
} else {
if (sUsrAg.indexOf("Chrome") > -1) {
peerName = "Chrome";
} else {
if (sUsrAg.indexOf("Firefox") > -1) {
peerName = "Firefox";
} else {
if (sUsrAg.indexOf("Safari") > -1) {
peerName = "Safari";
}
}
}
}
let socket = io(signalServerURL, {
transports: ["websocket"],
});
socket.emit("hi", peerName, (response) => {
console.log(response);
});
},[]);
return (
<></>
)
}
模块C可以接收connection事件,但是无法接收hi事件,为什么?
除此之外,我想使用不同的 module/class 来处理不同的套接字路径。
例如
对于路径/b socket访问,我想使用模块B来处理。
对于路径/d socket访问,我想使用模块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=>{
console.log("Connection to "+path);
socket.on("hi", (peerName, calllBack) => {
console.log("Received say hi from " + peerName + ".");
});
});
}
}
module.exports = C;
有效!
连接成功后,socket-io returns你需要使用的socket。您可以尝试类似的操作:
constructor(io) {
io.on("connection", (socket) => {
console.log("Connection to /c " + socket.id);
socket.on("hi", (peerName, calllBack) => {
console.log("Received say hi from " + peerName + ".");
});
});
}
如何为不同的套接字路径调用不同的模块? 这是服务器代码:
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",()=>{
console.log("Connection to /c");
});
socket.on("hi", (peerName, calllBack) => {
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(() => {
let peerName;
let signalServerURL=process.env.REACT_APP_SOCKET_URL + "c";
let sUsrAg = navigator.userAgent;
if (sUsrAg.indexOf("Edg") > -1) {
peerName = "Edge";
} else {
if (sUsrAg.indexOf("Chrome") > -1) {
peerName = "Chrome";
} else {
if (sUsrAg.indexOf("Firefox") > -1) {
peerName = "Firefox";
} else {
if (sUsrAg.indexOf("Safari") > -1) {
peerName = "Safari";
}
}
}
}
let socket = io(signalServerURL, {
transports: ["websocket"],
});
socket.emit("hi", peerName, (response) => {
console.log(response);
});
},[]);
return (
<></>
)
}
模块C可以接收connection事件,但是无法接收hi事件,为什么? 除此之外,我想使用不同的 module/class 来处理不同的套接字路径。
例如
对于路径/b socket访问,我想使用模块B来处理。
对于路径/d socket访问,我想使用模块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=>{
console.log("Connection to "+path);
socket.on("hi", (peerName, calllBack) => {
console.log("Received say hi from " + peerName + ".");
});
});
}
}
module.exports = C;
有效!
连接成功后,socket-io returns你需要使用的socket。您可以尝试类似的操作:
constructor(io) {
io.on("connection", (socket) => {
console.log("Connection to /c " + socket.id);
socket.on("hi", (peerName, calllBack) => {
console.log("Received say hi from " + peerName + ".");
});
});
}