【发布时间】:2022-11-04 03:49:01
【问题描述】:
我对这个 Node.js、Angular 13 和 Socket IO 场景感到困惑。 首先让我们假设我们已经将所有需要的信息保存在数据库中,比如房间号,房主,用户名等等
因此,假设我们要创建一个使用套接字同步所有玩家的在线测验游戏,此场景最多 6 个。然而,这就是问题所在……
- 在 Angular 代码中有这个服务正在连接客户端
带后端套接字服务.ts
export class SocketService { socket: any; readonly url: string = "ws://localhost:3000"; constructor() { this.socket = io(this.url) } }- 在服务器端 index.js 初始化 webSocket
index.js
const app = express(); const io = require('./sockets/websocket')(app);- 在 webSocket.js 中,我们创建了 socketIO 实例,以便根据需要在整个后端控制器中导出和使用
webSocket.js
module.exports = function(app){ this.server = require('http').createServer(app); this.socket = require('socket.io'); this.io = socket(server, { cors: { origin: "https://localhost:4200", credentials: true } }); this.server.listen(3000, () => { console.log("Socket IO is lestineng on port 3000"); }); io.on("connection", function (socket) { console.log("A user connected"); }); this.registerSocketToRoom = function(roomId){ try{ console.log('[socket]','join room :',roomId) io.join(roomId); io.sockets.to(roomId).emit('user joined', socket.id); }catch(e){ console.log('[error]','join room :',e); io.emit('error','couldnt perform requested action'); } } }- 这是一个示例控制器。我们导入从 webSocket.js 文件中导出的 SocketIO 的导出实例。假设我们想加入一个房间,如果客户端发出一个 http 请求加入一个房间然而,我们没有加入房间“插座连接”所以我们现在必须这样做。我们尝试使用导出的方法 {registerSocketToRoom}。
GameRoomManagerController.js
require('../../sockets/websocket'); ... // Some code here exports.joinGameRoom = function(req, res){ const roomId = req.params.roomId; console.log(roomId); registerSocketToRoom(roomId); return res.send({status: "success", msg: `joined Room: ${roomId}` }); }在执行创建房间的过程 -> 将信息保存到数据库 -> 加入房间时,会发生以下错误。
TypeError:io.sockets.join 不是函数
从理论上讲,这对我来说是正确的,但我认为我误解了 io 和 socket 之间的区别。
-
有人可以向我解释这里发生了什么吗?有没有可能 导出相同的 io 实例以用于 后端?
-
甚至可以加入一个房间后连接是 创建?
-
io和socket有什么区别?
【问题讨论】:
标签: node.js angular express sockets socket.io