问题描述
我有一台服务器,它定期发出数据。我想在我的rest API中使用这些数据,如何获取呢?从外部源推送数据时,需要自动调用它。我已经尝试了以下代码,但是没有用。
if (Now > resultToday) {
return resultTomorrow;
} else {
return resultToday;
}
解决方法
出于测试目的,请在服务器上设置类似的内容。使用和事件名称创建流,以便您可以在客户端上收听它。
const SseStream = require('ssestream')
app.get('/sse',(req,res) => {
console.log('new connection')
const sseStream = new SseStream(req)
sseStream.pipe(res)
const pusher = setInterval(() => {
sseStream.write({
event: 'server-time',data: new Date().toTimeString()
})
},1000)
res.on('close',() => {
console.log('lost connection')
clearInterval(pusher)
sseStream.unpipe(res)
})
})
在客户端上,您会听到这样的事件
var EventSource = require('eventsource')
var es = new EventSource(url)
es.addEventListener('message',function (e) {
console.log(e.data)
})
,
当我想从其他微服务中消费SSE时,我遇到了同样的问题,我遵循了这种方法,并且对我有用。
node.js文件
const eventSource = require('eventsource');
async socEventStream(req,res) {
// list of the event you want to consume
const list = ['EVENT1_NAME','EVENT2_NAME','EVENT3_NAME'];
try {
const e = new eventSource('url//of_sse_event',{});
for (const l of list) {
e.addEventListener(l,(e) => {
const data = e.data;
// Your data
console.log('event data =====>',data)
});
};
res.on('close',() => {
for (const l of list) {
e.removeEventListener(l,(e) => {
});
}
})
} catch (err) {
console.log(err)
}
}
如果您想在node.js上使用事件并将其发送给客户端,则
const eventSource = require('eventsource');
async socEventStream(req,res) {
// setting express timeout for more 24 hrs
req.setTimeout(24 * 60 * 60 * 1000);
// setting headers for client to send consumed sse to client
const headers = {
'Content-Type': 'text/event-stream','Connection': 'keep-alive','Cache-Control': 'no-cache','Access-Control-Allow-Headers': 'Content-Type,Access-Control-Allow-Headers,Authorization,X-Requested-With,observe,x-access-key','Access-Control-Allow-Methods': 'POST,PUT,GET,OPTIONS,DELETE','Access-Control-Allow-Origin': '*',};
res.setTimeout(24 * 60 * 60 * 1000);
res.writeHead(200,headers);
// list of the event you want to consume
const list = ['EVENT1_NAME',(e) => {
const data = e.data;
// Your data
res.write(`event:${l}\ndata:${data}\n\n`);
});
};
req.on('close',(e) => {
});
}
})
} catch (err) {
console.log(err)
}
}