我正在开发一款基于在线游戏的游戏,以便自学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)
});
有什么想法吗?
答案 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(){})事件中获得的所有响应,然后你可以处理这个数组后来。我不知道你的具体要求是什么,但如果有效,请告诉我。