我正在使用客户端向节点js服务器发送post请求以执行长请求。在此过程中,我希望服务器端可以让客户端知道已经完成了多少工作以及它当前处于哪个步骤。所以我想知道服务器端是否有办法不断地在客户端发送事件可以收到。 $(document).on()可以接收的东西。但它不必以这种方式受到限制。
似乎$ .post只从服务器端获取一次数据。那么如何在发布后能够连续接收服务器端数据?
答案 0 :(得分:2)
在服务器端和客户端之间创建实时通信的唯一方法是使用websockets。正如@Nonemoticoner已经提到的,最着名的websocket库是Socket.io
答案 1 :(得分:2)
你需要使用socket.io来做到这一点。
答案 2 :(得分:0)
由于您只想从服务器向客户端发送消息,因此您也可以使用 服务器发送的事件(SSE)。
您可以像这样在客户端脚本中为 SSE 设置监听器:
var serverEvents = new EventSource('http://localhost:8080/events');
serverEvents.addEventListener('message', function(event){
console.log(event.data);
});
浏览器将向创建新EventSource时提供的URL发送请求,以建立连接,然后,从服务器中,您仅需要以特定格式发送消息,例如:
data: some data
data: {"name": "bobby"}
个别消息必须用一对换行符分隔
Node.js示例:
const http = require('http');
const server = http.createServer((req, res) => {
if( req.url === '/events'){
res.writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Access-Control-Allow-Origin': '*'
});
setTimeout(() => {
res.write('data: some data\n\n');
}, 1000);
}
});
server.listen(8080, '127.0.0.1');
查看此链接以获取更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events