如何使用 socket.io 等待客户端响应
How to wait for client response with 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)
});
有什么想法吗?
我认为这是不可能的。
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(){})事件中获得的所有响应保存在数组中,然后您可以稍后处理此数组。我不知道您的确切要求是什么,但请告诉我是否有效。
由于您在客户端发出socket.emit('refresh', input)
,因此您只需要在服务器端设置一个套接字事件侦听器。例如:
io.sockets.on('connection', function (socket) {
socket.on('refresh', function (data) {
console.log(data) //input
});
})
我还要指出,为了您不会遇到麻烦,无限循环是节点中的一个大名号。Nodejs 在单个线程上运行,因此只要循环正在运行,您实际上就会阻止所有客户端。
相关文章:
- 使用 RESTful API,如果未定义特定的响应 json 级别,我如何在客户端不出错
- 可以't为客户端形成正确的JSON响应
- 从服务器到客户端的响应状态
- node.js+MySQL;JSON结果-回调问题&没有响应客户端
- 将简单的Perl脚本翻译成Python,向客户端发送响应
- Nodejs-websocket:如何在没有服务器响应的情况下连续发送客户端消息
- 在转发到代理目标并将响应发送回客户端之前,编辑POST参数
- 如何在谷歌地图服务的Go客户端中使用方向响应
- 客户端始终响应上一个服务器发送的事件,而不是当前事件
- Socket.io 和 Nodejs:向多个客户端发送响应并且更改未保存(?
- 如何在一个 Http 响应中将多个 mime 类型返回到 Web 客户端
- 如何使用 socket.io 等待客户端响应
- Socket.io 客户端:使用一个处理程序响应所有事件
- 如何在响应 Angular 客户端应用时发送 API 密钥
- 服务器发送事件如何将响应发送到特定客户端
- 节点.js xmpp 客户端收到“BAD_REGISTRATION”错误作为消息响应
- 向除发件人以外的所有客户端发送响应
- 节点ACS 404未找到Java http客户端的响应代码
- 为什么在未读取响应的情况下,节点http客户端仍在运行
- 与node.js我如何设置var从HTTP客户端响应