grpc双向流 python_gRPC双向数据流的交互控制(go语言实现)

本文通过Go语言实现了一个gRPC的双向流交互案例,包括客户端和服务端的搭建过程。详细介绍了如何创建连接、声明客户端及上下文,并实现双向数据流的交互控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8 "google.golang.org/grpc"

9 proto "chat" // 根据proto文件自动生成的代码

10)

11func main() {

12 // 创建连接

13 conn, err := grpc.Dial("localhost:3000", grpc.WithInsecure())

14 if err != nil {

15 log.Printf("连接失败: [%v] ", err)

16 return

17 }

18 defer conn.Close()

19 // 声明客户端

20 client := proto.NewChatClient(conn)

21 // 声明 context

22 ctx := context.Background()

23 // 创建双向数据流

24 stream, err := client.BidStream(ctx)

25 if err != nil {

26 log.Printf("创建数据流失败: [%v] ", err)

27 }

28 // 启动一个 goroutine 接收命令行输入的指令

29 go func() {

30 log.Println("请输入消息...")

31 输入 := bufio.NewReader(os.Stdin)

32 for {

33 // 获取 命令行输入的字符串, 以回车 作为结束标志

34 命令行输入的字符串, _ := 输入.ReadString(' ')

35 // 向服务端发送 指令

36 if err := stream.Send(&proto.Request{Input: 命令行输入的字符串}); err != nil {

37 return

38 }

39 }

40 }()

41 for {

42 // 接收从 服务端返回的数据流

43 响应, err := stream.Recv()

44 if err == io.EOF {

45 log.Println("⚠️ 收到服务端的结束信号")

46 break //如果收到结束信号,则退出“接收循环”,结束客户端程序

47 }

48 if err != nil {

49 // TODO: 处理接收错误

50 log.Println("接收数据出错:", err)

51 }

52 // 没有错误的情况下,打印来自服务端的消息

53 log.Printf("[客户端收到]: %s", 响应.Output)

54 }

55}

运行效果

先启动服务端程序 server.go

再启动客户端程序 client.go

输入消息,结果类似下图:

总结

gRPC是个很强大的RPC框架,而且支持多语言编程,上面的服务端、客户端程序我们完全可以用不同的语言实现,比如服务端用JAVA,客户端用Python...

gRPC的四种交互模式也给我们提供了很大的发挥空间,最近Nginx宣布支持gRPC,这可能也预示着某种趋势...

异步社区是一个有料、有货,又专业的IT专业图书社区,在这里可以读到最新、最热的IT类图书!

我想要社区的《Git高手之路》这本书,这本书是网络编程的经典图书,请大家帮我点赞!

本文摘自异步社区,作者:阿狸不歌 作品:《gRPC双向数据流的交互控制(go语言实现)》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值