我如何在不同的函数中访问我的WebSocket?

d6kp6zgx  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(154)

我Socket.io在Node.js服务器上实现www.example.com时遇到了一个问题,我有两个文件,一个包含中间件,另一个用于启动服务器并初始化套接字。
我遇到的问题是访问中间件中的套接字。我已经附加了我的代码,实际的中间件函数在user导出中,而userSocket导出只是用来在服务器文件中创建套接字。
我希望能够在user中间件的sendMessage方法中执行类似io.emit("message", message)的操作,但是我的方法不能访问io变量,如果可以,我不确定是否可以,因为服务器创建的套接字是基于userSocket函数的。有没有办法在特定的中间件中处理套接字事件?

// this is the middleware file
const userSocket = (io) => {
        io.on("connection", (socket) => {
            socket.on("join-room", (id) => {
                socket.join(id);
                console.log(`user joined room ${id}`);
            });
        });
    };

module.exports.userSocket = userSocket;

module.exports.user = {
    sendMessage: // access the socket here
}

// this is the server file
const express = require("express");
const app = express();
const { createServer } = require("http");
const httpServer = createServer(app);

const port = 3000;
const io = require("socket.io")(httpServer, { cors: { origin: "*" } });

const { userSocket } = require("./resources/users/user");
userSocket(io);

httpServer.listen(port);
console.log(`Listening on port ${port}`);
lbsnaicq

lbsnaicq1#

这是我为一个项目所做的工作:

index.js (main file)
After you do the initial config with the http server export your socket: 

io.sockets.on("connection", function (socket) {
console.log("New Client Connected");
});

httpServer.listen(3300, () => {
  console.log(`App listening on port ${3300}`);
});
//export
const socketIoObject = io;
export default socketIoObject;

在中间件中,您可以按如下方式使用它:

//middleware file

//import
import socketIoObject from "../index.js"

//your route
idk.get("/something",(req,res,next)=>{

//your logic if any
//using the socket

  socketIoObject.emit('student', {
        //emit the data to the socket
    });
}

希望这对你有帮助

相关问题