github-unifrost/unifrost:使用伺服器傳送事件(EventSource)技術中繼Apache Kafka等pubsub訊息流到Web,便於實時檢視訊息內容

banq發表於2019-12-21

unifrost是一個go模組,用於通過SSE(Eventsource)將pubsub訊息中繼到Web 。它基於Twitter的實現,用於在其新的Web應用程式中進行實時事件流傳輸。

它使用Go CDK作為支援多個pubsub供應商的供應商中性pubsub驅動程式:

  • Google Cloud Pub / Sub
  • Amazon Simple Queuing Service(待處理)
  • Azure服務匯流排(待定)
  • RabbitMQ
  • NATS
  • Apache Kafka
  • 記憶體中(僅用於測試)

為什麼要選擇SSE而不是WebSockets?

原因之一是因為後來的API(如WebSocket)提供了更豐富的協議來執行雙向全雙工通訊。但是,在某些情況下,不需要從客戶端傳送資料。您只需要某些伺服器操作的更新即可。一些示例是朋友的狀態更新,股票行情自動收錄器,新聞提要或其他自動資料推送機制(例如,更新客戶端Web SQL資料庫或IndexedDB物件儲存)。如果您需要將資料傳送到伺服器,則Fetch API永遠是朋友。

SSE通過傳統的HTTP傳送。這意味著它們不需要特殊的協議或伺服器實現即可正常工作。另一方面,WebSockets需要全雙工連線和新的Web Socket伺服器來處理協議。另外,伺服器傳送的事件具有WebSocket設計上缺少的各種功能,例如自動重新連線,事件ID和傳送任意事件的功能。

因為SSE在HTTP之上工作,所以HTTP協議的改進也可以使SSE受益。例如,基於QUIC的開發中的HTTP / 3協議可以在由於缺少行頭阻塞而導致資料包丟失的情況下提供其他效能改進。

 

相關文章