我正在构建一个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部分的更新。有没有办法确保没有事件是错过了,还没有提供一种方法来获得给定工作的所有事件?
答案 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对象不等到在服务器上创建作业以进行初始化,因此可能会减少。