订阅发布/订阅活动时获取以前的活动

时间:2017-07-22 09:02:25

标签: javascript eventsource

我正在构建一个Web应用程序,用户可以将作业排队以进行处理。后端日志可能包含:

10:57: Job 101: Part 8 of 10 completed
10:58: Job 101: Part 9 of 10 completed
10:59: Job 100: Part 4 of 7 completed
11:00: New Job Queued.  ID will be 102
11:01: Job 100: Part 5 of 7 completed
11:02: Job 101: All 10 parts completed
11:03: Job 102: started
11:04: Job 100: Part 6 of 7 completed
11:05: Job 102: Part 1 of 12 completed

前端代码如下所示:

axios.post('/job').then((res)=>{
  var job_id = res.body // job_id will be 102
  var source = new EventSource("/status?job_id="+job_id);
  source.onmessage = (event)=>{
    updatePageWith(event.data)
  }
})

因为EventSource订阅不是即时的,所以从服务器发回的第一条消息可能是“完成的第2部分12”,缺少第1部分的更新。有没有办法确保没有事件是错过了,还没有提供一种方法来获得给定工作的所有事件?

1 个答案:

答案 0 :(得分:0)

我最终解决了以下问题:

var tracking_id = require('uuid/v4')()
var source = new EventSource("/status?tracking_id="+tracking_id)
source.onmessage = (event)=>{
  updatePageWith(event.data)
}
axios.post('/job', { track_with: tracking_id }).then((res)=>{
  var job_id = res.body // job_id will be 102
})

我意识到在注册EventSource并接收更新之前作业开始处理的可能性很小,但是由于EventSource对象不等到在服务器上创建作业以进行初始化,因此可能会减少。