W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Server-Sent 事件 (SSE) 是一種服務(wù)器推送技術(shù),使客戶端能夠通過 HTTP 連接從服務(wù)器接收自動更新。 每個通知都作為由一對換行符終止的文本塊發(fā)送。
要在路由(在控制器類中注冊的路由)上啟用 Server-Sent 事件,請使用 @Sse() 裝飾器注解方法處理程序。
@Sse('sse')
sse(): Observable<MessageEvent> {
return interval(1000).pipe(map((_) => ({ data: { hello: 'world' } })));
}
提示 :@Sse() 裝飾器和 MessageEvent 接口是從 @nestjs/common 導(dǎo)入的,而 Observable、interval 和 map 是從 rxjs 包中導(dǎo)入的。
警告 : Server-Sent 事件路由必須返回一個 Observable 流。
在上面的示例中,我們定義了一個名為 sse 的路由,它將允許我們發(fā)送實時更新。 可以使用 EventSource API 監(jiān)聽這些事件。
sse 方法返回一個發(fā)出多個 MessageEvent 的 Observable(在此示例中,它每秒發(fā)出一個新的 MessageEvent)。 MessageEvent 對象應(yīng)遵循以下接口以匹配規(guī)范:
export interface MessageEvent {
data: string | object;
id?: string;
type?: string;
retry?: number;
}
有了這個,我們現(xiàn)在可以在我們的客戶端應(yīng)用程序中創(chuàng)建 EventSource 類的實例,將 /sse 路由(它與我們傳遞給上面的 @Sse() 裝飾器的端點匹配)作為構(gòu)造函數(shù)參數(shù)傳遞。
EventSource 實例打開與 HTTP 服務(wù)器的持久連接,該服務(wù)器以文本/事件流格式發(fā)送事件。 連接保持打開狀態(tài),直到通過調(diào)用 EventSource.close() 關(guān)閉。
一旦打開連接,來自服務(wù)器的傳入消息就會以事件的形式傳遞給我們的代碼。 如果傳入消息中有事件字段,則觸發(fā)的事件與事件字段值相同。 如果不存在事件字段,則觸發(fā)通用消息事件。
const eventSource = new EventSource('/sse');
eventSource.onmessage = ({ data }) => {
console.log('New message', JSON.parse(data));
};
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: