2

我正在开发一款基于回合制的在线游戏,以便自学 Node.js 和 Socket.IO。游戏的某些方面在服务器端解决。在这些功能之一期间的某一时刻,服务器可能需要来自客户端的输入。有没有一种方法可以“暂停”服务器功能的解析以等待客户端响应(通过 a var x = window.prompt)?

这是我正在使用的代码的一个想法:

服务器:

for (some loop){
  if (some condition){
   request input via io.sockets.socket(userSocket[i]).emit('requestInput', data)  
  }
}

客户:

socket.on('requestInput', function (data) {
  var input = window.prompt('What is your input regarding ' + data + '?');
  //send input back to the server
  socket.emit('refresh', input)  
});

有什么想法吗?

4

2 回答 2

1

由于您是socket.emit('refresh', input)在客户端发出的,因此您只需要在服务器端也设置一个套接字事件侦听器。例如:

io.sockets.on('connection', function (socket) {
  socket.on('refresh', function (data) {
    console.log(data) //input
  });
})

我还要指出,这样你就不会遇到麻烦,无限循环是 node.js 中的一个很大的 nono。Nodejs 在单个线程上运行,因此只要您的循环正在运行,您实际上就会阻塞所有客户端。

于 2013-10-04T17:34:27.467 回答
1

我不认为这是可能的。

for (some loop){
    if (some condition){
    request input via io.sockets.socket(userSocket[i]).emit('requestInput', data) 
    /* Even if you were able to pause the execution here, there is no way to resume   it when client emits the 'refresh' event with user input */
}

}

您可以做的是在不暂停的情况下发出所有 'requestInput' 事件,并将您在 socket.on('refresh',function(){}) 事件中获得的所有响应保存在一个数组中,然后您可以稍后处理这个数组。我不知道您的确切要求是什么,但请告诉我是否可行。

于 2013-10-05T05:11:17.060 回答