gRPC支持流式通信,因net/rpc仅支持同步请求响应,而gRPC基于HTTP/2提供客户端流、服务端流和双向流,适用于实时推送等场景,需通过proto文件定义stream并生成代码实现,配合goroutine管理读写。
Go 语言的 net/rpc 包本身不支持流式通信(streaming),它只提供“请求-响应”式的同步调用。若需实现真正的流式 RPC(如服务端持续推送数据、客户端边发边收、双向实时传输),应使用 gRPC —— 这是 Google 开发的高性能 RPC 框架,原生支持四种通信模式,其中三种为流式:单向流(client/server streaming)、双向流(bidirectional streaming)。
标准 net/rpc 基于 Go 的反射和编码(如 gob/json),每次调用都是一次完整封包与解包,无法复用连接、无法中途传递多段数据。而 gRPC 基于 HTTP/2,天然支持多路复用、头部压缩、连接复用和真正的流式语义。实际项目中,凡涉及日志推送、实时指标、消息广播、大文件分块上传/下载等场景,都应优先选用 gRPC。
流式能力由 Protocol Buffers 的 service 定义决定。关键看 stream 关键字位置:
rpc Upload(stream Chunk) returns (Status);(客户端连续发,服务端收完统一回)rpc Subscribe(Request) returns (stream Event);(客户端发一次,服务端持续推多个响应)rpc Chat(stream Message) returns (stream Message);(双方可随时发、随时收,独立异步)定义后用 protoc 工具生成 Go 代码(需安装 protoc-gen-go 和 protoc-gen-go-grpc 插件)。
以双向聊天流为例,服务端需在 handler 中启动 goroutine 处理接收,同时保持发送通道开放:
func (s *chatServer) Chat(stream pb.Chat_ChatServer) error {
// 启动接收协程
go func() {
for {
msg, err := stream.Recv()
if err == io.EOF {
return
}
if err != nil {
log.Printf("recv err: %v", err)
return
}
// 广播或转发逻辑(如存入 map 或发给其他 client)
}
}()
// 主协程负责发送(例如定时广播、或响应某事件)
ticker := time.NewTicker(5 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
_ = stream.Send(&pb.Message{Content: "server heartbeat"})
case <-stream.Context().Done():
return stream.Context().Err()
}
}}
客户端使用流式客户端(发送+接收并行)
客户端需显式调用 Send() 和 Recv(),通常用两个 goroutine 分离读写:
stream.Send() 发送用户输入或心跳stream.Recv() 读取服务端推送,处理或打印io.EOF(流正常结束)和 context.Canceled(主动断开)务必用 stream.CloseSend() 显式关闭发送端(尤其客户端流或双向流),
否则服务端可能一直等待。
基本上就这些。gRPC 流式不是“配置开关”,而是由 proto 定义驱动、由生成代码约束、靠手动管理读写 goroutine 实现的协作模型。不复杂但容易忽略上下文控制和错误传播,建议搭配 errgroup 管理多协程生命周期。
# js
# json
# go
# golang
# 编码
# 工具
# stream
# google
# EOF
# 循环
# 接口
# Event
# 异步
# http
# rpc
# 流式
# 服务端
# 客户端
# 复用
# 封包
# 都是
# 这是
# 多个
# 是由
# 适用于
相关文章:
MySQL查询结果复制到新表的方法(更新、插入)
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
建站VPS推荐:2025年高性能服务器配置指南
青岛网站建设如何选择本地服务器?
免费ppt制作网站,有没有值得推荐的免费PPT网站?
*服务器网站为何频现安全漏洞?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
常州企业建站如何选择最佳模板?
如何用免费手机建站系统零基础打造专业网站?
如何通过多用户协作模板快速搭建高效企业网站?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
兔展官网 在线制作,怎样制作微信请帖?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
宝塔Windows建站如何避免显示默认IIS页面?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
如何用wdcp快速搭建高效网站?
建站主机是否等同于虚拟主机?
建站之星在线版空间:自助建站+智能模板一键生成方案
建站之星如何实现五合一智能建站与营销推广?
平台云上自助建站如何快速打造专业网站?
如何登录建站主机?访问步骤全解析
建站中国官网:模板定制+SEO优化+建站流程一站式指南
一键网站制作软件,义乌购一件代发流程?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
免费网站制作appp,免费制作app哪个平台好?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
浅谈Javascript中的Label语句
如何选择PHP开源工具快速搭建网站?
如何通过免费商城建站系统源码自定义网站主题与功能?
建站主机类型有哪些?如何正确选型
学校建站服务器如何选型才能满足性能需求?
北京网站制作的公司有哪些,北京白云观官方网站?
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
如何在Windows虚拟主机上快速搭建网站?
如何快速建站并高效导出源代码?
西安专业网站制作公司有哪些,陕西省建行官方网站?
智能起名网站制作软件有哪些,制作logo的软件?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
XML的“混合内容”是什么 怎么用DTD或XSD定义
建站之星免费版是否永久可用?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
如何在云服务器上快速搭建个人网站?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
南京网站制作费用,南京远驱官方网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。