github-unifrost/unifrost:使用服务器发送事件(EventSource)技术中继Apache Kafka等pubsub消息流到Web,便于实时查看消息内容


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协议可以在由于缺少行头阻塞而导致数据包丢失的情况下提供其他性能改进。