【问题标题】:How to receive data from server on two clients如何在两个客户端上从服务器接收数据
【发布时间】:2019-06-07 21:16:45
【问题描述】:

我有一个客户端测试功能,它将测试对象发送到 socket.io 服务器,该服务器的工作是等待客户端事件,然后将数据发送到房间中原始客户端发出的每个客户端事件来自。但是,只有原始客户端从服务器接收事件。房间里的另一个客户没有收到它。

我已经尝试过io.in(room).emit()io.to(room).emit() 服务器端。两个客户肯定会加入同一个房间。并且服务器也从原始客户端接收事件。

Server.js:

const express = require("express");
const app = express();
const server = require("http").createServer(app);
const io = require("socket.io").listen(server);
const port = process.env.PORT || 3000;
io.on("connection", socket => {
    console.log("user connected: " + socket.id);
    socket.on("test", test => {
        console.log("received from client, emitting to room: " +     test.room);
        // io.to(test.room).emit("test", {key: "property from server"}
        // io.in(test.room).emit("test", {key: property from server"}
    })
})
server.listen(port, () => {
    console.log("server running on port: " + port);
});

父组件:

const socket = io("http://172.31.99.250:3000");
export default class Lobby extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      username: "",
      queue: [],
      playerOne: null,
      playerTwo: null,
      currentMove: "",
      matchFound: false,
      room: null
    };
  }
componentDidMount() {
  this.joinLobby();
}
joinLobby() {
  socket.emit("findMatch() )
  socket.on("matchFound", data => {
  this.setState({
    currentMove: data.currentMove,
    playerOne: data.p1,
    playerTwo: data.p2,
    matchFound: true,
    room: data.gameId
  });
});   
render() {
    return this.state.matchFound == true ? (
         <ChildComponent
             room={this.state.room}
             socket={socket}
         />
     );
}
}

子组件:

export default class GameBoard extends Component {
  constructor(props) {
    super(props);
    this.state = {
      inProgress: true,
      msg: null
    }
componentDidMount() {
    alert("Room ID: " + this.props.room);
}
onTest = () => {
this.props.socket.emit("test", {
  testKey: "testProperty",
  room: this.props.room
});
this.props.socket.on("test", response => {
  alert("response received: " + response.key);
  });
};
render() {
   <View>
     <TouchableOpacity
       onPress={this.onTest}
     />
   </View>
 }
 }

我希望在两个连接的客户端上读取服务器消息,房间中的每个客户端都发送原始事件,但是只有源客户端接收服务器消息,而不是同一个房间的第二个客户端

【问题讨论】:

    标签: javascript node.js sockets socket.io


    【解决方案1】:

    我认为你需要在 server.js 中做

    socket.join(test.room);
    

    【讨论】:

    • 服务器中有一个函数,它创建一个具有唯一 ID 的游戏对象,并使用该 ID 作为房间名称并将套接字连接到房间。然后在套接字事件中,迭代游戏对象,最终第二个套接字也加入房间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 2021-09-30
    • 2014-04-03
    • 1970-01-01
    • 2017-12-29
    相关资源
    最近更新 更多