当前位置: 首页 > 知识库问答 >
问题:

如何在两个客户端上从服务器接收数据

张丰
2023-03-14

我有一个客户端测试功能,它将测试对象发送到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>
 }
 }

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

共有1个答案

颜鸿云
2023-03-14

我认为在服务器上。你需要做的js

socket.join(test.room);
 类似资料:
  • 我想做的是: 为了学习游戏编程,我使用专用服务器和UDP创建了一个回声设置。专用服务器在不同的城市(也就是不在我的本地网络中)。 在我的本地计算机上,我有一个udp客户端和服务器(两个不同的程序)。当我第一次启动python服务器时,windows防火墙立即询问我是否要添加异常。在允许我的python服务器联网之后,我仍然没有收到任何消息。(客户- 我的问题是: 游戏如何解决这个问题?我没有为我想

  • 使用套接字列表编辑: 按照EJP的建议,这样做我的问题就解决了。

  • 问题内容: 我正在尝试用两个客户端实现一个系统,其中一个客户端发送一条消息,而另一个客户端将接收该消息。下图将以更直观的方式对其进行解释: 因此,客户端1将消息发送到服务器(此工作正常),服务器接收到“推送”消息并发出应由客户端2接收的“弹出”消息。这里的问题是客户端2从未收到“流行”消息。:( 这是所有代码。 SERVER.JS 客户1(aka mobile.html) 客户2(aka web.

  • 我想配置TCP服务器以接收和回复来自多个客户端的数据。我搜索了许多其他线程,但找不到确切的方法。我第一次使用Spring集成,没有经验。 服务器要求 应该能够接收和回复特定客户端的数据(可以有多个客户端,每个客户端应该单独处理) 应该能够将数据发送到客户端并等待特定超时的响应。 应该能够检测客户端是否断开连接。如果客户端断开连接,则应关闭连接以节省内存。(在早期没有Spring集成的方法中,我可以

  • 我正在尝试使用UDP在服务器(在公共IP上)和客户端(通过NAT)之间进行双向通信。我的逻辑是,如果服务器向IP和它接收数据包的端口发送一些数据,客户端仍然应该得到它,因为NAT最终会有将数据包发送到客户端的映射。 客户端有 2 个进程,一个用于发送数据包,另一个进程用于接收数据。服务器继续等待数据,如果它获得数据,它会将数据发送回从接收数据的端口和 IP。 客户代码如下: client_recv

  • 客户端-NAT后面的Windows桌面,运行UDP客户端应用程序。 服务器-具有公共IP的Ubuntu服务器,运行一个UDP服务器应用程序,该应用程序期望在端口6000上发送数据包。 ClientPrivate/Public-客户端的私有/公共IP 服务器私有/公共 - 服务器的私有/公共 IP 客户端打开一个UDP套接字Client私人: 777和发送数据报Server公共: 6000 服务器从