我正在使用客户端向 Node js 服务器发送 post 请求以执行长请求。在此过程中,我希望服务器端可以让客户端知道已经完成了多少工作以及当前处于哪个步骤。所以我想知道服务器端是否有办法不断向客户端发送事件可以收到。 $(document).on() 可以接收的东西。但它不必以这种方式受到限制。
好像是 $.post 只从服务器端获取一次数据。那么如何才能在发布后持续接收服务器端数据呢?
最佳答案
由于你只想从服务器向客户端发送消息,你也可以使用 服务器发送的事件 (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
关于javascript - 如何通过 Node js将事件发送到客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37139078/