【发布时间】:2014-05-26 20:24:15
【问题描述】:
我的 node.js 服务器将对上传的文件执行某些操作,我想将进度近乎实时地反馈给客户端。此操作大约需要 30 秒 - 1 分钟才能完成。
理想情况下,文件上传后,客户端将能够观察服务器对文件的操作进度。
我可以执行常规轮询、长轮询或通过 websockets 连接到服务器,但所有这些似乎都需要相当复杂的设置来设置 30 秒到 1 分钟的进度指示器。
有更好的方法吗?
【问题讨论】:
我的 node.js 服务器将对上传的文件执行某些操作,我想将进度近乎实时地反馈给客户端。此操作大约需要 30 秒 - 1 分钟才能完成。
理想情况下,文件上传后,客户端将能够观察服务器对文件的操作进度。
我可以执行常规轮询、长轮询或通过 websockets 连接到服务器,但所有这些似乎都需要相当复杂的设置来设置 30 秒到 1 分钟的进度指示器。
有更好的方法吗?
【问题讨论】:
我会用socket.io 来做这件事。可能有更好的方法,但 socket.io 相对容易配置。
您在使用 Express.js 吗?如果是这样,请确保查看特定于 Express 的部分以获取有关配置的详细信息。配置完成后,您需要执行以下操作:
在服务器上,你会想要发出一个新的状态
socket.emit('status','aok!');
在客户端,您需要从服务器监听新状态
socket.on('status', function (msg) {
console.log(msg);
//Put code here to update the page!
});
您可能需要考虑调整心跳时间。基本上,服务器每隔一段时间就会对客户端进行 ping 操作,以检查它们是否仍然连接。我相信默认情况下,这种情况每 25 秒发生一次,超时发生,60 秒后没有响应。您可能希望延长心跳之间的时间,甚至完全禁用它们。
【讨论】: