如何使用socket.io等待客户端响应?

时间:2013-10-04 15:57:34

标签: javascript node.js socket.io

我正在开发一款基于在线游戏的游戏,以便自学Node.js和Socket.IO。游戏的某些方面是服务器端解决的。在其中一个功能期间,服务器可能需要来自客户端的输入。有没有办法可以“暂停”服务器功能的解析,等待客户端响应(通过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)  
});

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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(){})事件中获得的所有响应,然后你可以处理这个数组后来。我不知道你的具体要求是什么,但如果有效,请告诉我。