javascript - 如何通过 Node js将事件发送到客户端

标签 javascript node.js

我正在使用客户端向 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/

相关文章:

javascript - JQuery 的动态下拉选项

javascript - 传递参数 : Objective javascript

javascript - 选择输入时显示隐藏的跨度

angularjs - AngularJS中页面刷新或移动到另一个页面后保留下拉值

javascript - 安装 Node 模块错误

javascript - 我怎样才能用另一个函数包装每个快速路由处理程序

python - 安装Appium的一些问题

javascript - IE9 F12 开发人员工具 - "Load(event)"和 "page has finished loading"有什么区别?

javascript - RequireJS 与 main.js 共享数组

javascript - 无法使用node js服务器访问html内容,