socket.io - 我无法在 socket.on() 中使用 socket.emit()

问题描述 投票:0回答:1

我正在学习将node.js和socket.io与react.js一起使用。我的套接字有问题。我目前正在开发一个石头剪刀布游戏来练习,我的套接字有两个侦听器:createRoom 和 joinRoom。在我的 joinRoom 监听器中,我想向房间的两个成员发送一个套接字。但是,当我在 socket.on('joinRoom') 中时,我无法发送套接字。这是一些代码,可以帮助您更好地理解我的问题:

// server-side
io.on('connection', (socket) => {
  socket.emit('startGame'); // Works
  socket.on('joinRoom', (data) => {
    socket.emit('startGame'); // Does not work
    socket.to(data.room).emit('startGame'); // Does not work
    io.to(data.room).emit('startGame'); // Does not work
    io.emit('startGame'); // Works but it sends the socket to all clients and that's not what I want
  });
});
  // client-side
  useEffect(() => {    
    socket.on('startGame', (data) => {
      alert(socket.id);
    });
    
    return () => {
      socket.off('startGame');
    };
  }, [socket]);
// server.js
const express = require('express')
const app = express();
const http = require('http');
const { Server } = require('socket.io');
const cors = require("cors");
app.use(cors());
const gameController = require('./controller/gameController');
const server = http.createServer(app);
const io = new Server(server, {
  cors: {
    origin: "http://localhost:3000",
  },
});

io.on('connection', (socket) => gameController.socketHandler(io, socket));

server.listen(3001);
module.exports = io;

我已经尝试通过查看其他示例来更改我的代码。我严格按照socket.io文档进行操作,甚至更改了socket.io的版本,但这没有任何区别。

javascript socket.io
1个回答
0
投票

它已经解决了,因为我是从 Node.js 开始的,所以我不知道,但我使用了 useEffect 来处理发射所在组件之外的客户端套接字(我不知道如果我清楚的话)。

© www.soinside.com 2019 - 2024. All rights reserved.