了解一下 SSE
SSE (Server-Sent Events) ,一项由 Opera 浏览器在 2006 年实现的“老”技术,由于 ChatGPT 的火爆又出现在大家的视野中。
SSE 是什么?
早在 2017 年,阮一峰老师就写个一篇《Server-Sent Events 教程》,简单总结一下。
SSE 基于 HTTP 协议,其 Content-Type 为 text/event-stream,Transfer-Encoding 为 chunked。
与 WebSocket 协议不同的是,SSE 是单向的,只能由 Server 不断向 Browser 推送事件。
事件的内容是文本的,而且格式也很简单,用换行分割的 key: value。
用 WireShark 抓个包,一目了然
流式 RPC
这跟 gRPC 的 server streaming 的通信模式很像,两者结合在一起就是 LLM 的最佳玩法儿。
最近参加了一个 CloudWeGo 的 meetup,了解到 kitex 在 thrift 协议上也实现了 streaming 通信模式,实现方式也是基于 HTTP2,只是将 Protobuf 序列化换成了 thrift 序列化,由于 HTTP2 的 stream 过于复杂,CloudWeGo 社区还在开发基于自研协议的 TTHeader 的 streaming。
Demo
用 hertz 和 kitex 写了个小 demo
由于 Golang 有协程,业务逻辑写起来很简单明了。
这要是换成 Java 的线程,吞吐量肯定很受限制,改成异步回调又会增加理解成本。好在 Java 21 有虚拟线程了,不至于让 Java 在 LLM 工程领域落后太多。
版权声明: 本文为 InfoQ 作者【袁世超】的原创文章。
原文链接:【http://xie.infoq.cn/article/54baacc20b4cd226cfefaaa65】。文章转载请联系作者。
评论