通过Websocket与gRPC交互 | gRPC双向数据流的交互控制系列(2)
在本系列第一篇文章《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.epubit.com/selfpublish/article/1922)中,我们完成了通过控制台进行gRPC双向数据流交互控制的实验。但是只是用控制台交互大大限制了客户端的使用范围,如果我们要在网页或者移动端与gRPC进行双向数据流的交互怎么办?熟悉前端开发的朋友可能马上就会想到:用Websocket啦!
###Websocket简介 WebSocket协议诞生于2008年,2011年成为国际标准,现代浏览器都已经支持Websocket,移动端不管是安卓还是iOS也没有问题。Websocket提供一种在单个TCP 连接上进行全双工通讯的协议,使得客户端和服务端只需要做一个握手的动作,然后,客户端和服务端之间就形成了一条快速通道,两者之间就直接可以进行双向的数据传输。看到这我们可以发现Websocket与gRPC双向数据流之间简直是天作之合!
###整合Websocket服务端 + gRPC客户端 主流的各种语言都有库可供Websocket的服务端使用,为与前文(https://www.epubit.com/selfpublish/article/1922)保持一致,我们仍然用Go语言来时实现。Go语言中常用的Websocket库是gorrila websocket (github.com/gorilla/websocket),为了使代码看起来更简洁一些,我们本次采用封装了gorrila websocket的微型框架 melody (github.com/olahol/melody)和 gin框架(github.com/gin-gonic/gin) 来实现。
gin在本程序中的作用比较简单,就是提供路由,一个是静态资源(index.html)的路由,一个是websocket的路由。
melody有三个最重要的函数:一个是HandleConnect,用于响应websocket客户端的连接事件;一个是HandleMessage,用于处理websocket客户端输入的消息;一个是HandleDisconnect,用于处理websocket客户端断开连接事件。melody封装了session,并且可以利用session存取自定义数据。
####ws-server-grpc-client.go
###websocket客户端 为简便起见,本例中的客户端没有使用任何框架,而是用了最原始的html和javascript,所以界面比较简陋。我们完全可以用Angular、React、Vue、jQuery……或者基于移动端进行开发。 ####index.html
###gRPC服务端 与《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.epubit.com/selfpublish/article/1922)相比,server.go 做了小幅调整,主要是响应指令的条件上做了修改,读者们可以自行比较。
####server.go
###运行效果 先启动服务端程序 server.go 再启动客户端程序 ws-server-grpc-client.go
打开浏览器,进入指定的地址,如 127.0.0.1:8080 输入消息,结果类似下图:
###小结 本文的例子充分利用了Websocket全双工通信的特性,实现了前端程序与gRPC服务端通过双向数据流进行交互。在下一篇文章中,笔者将介绍如何利用nginx最新特性实现gRPC服务端的负载均衡。
异步社区是一个有料、有货,又专业的IT专业图书社区,在这里可以读到最新、最热的IT类图书! 我想要社区的《自制编程语言——基于C语言》这本书,这本书是编译原理方面的经典图书,请大家帮我点赞!
转载声明:本文转载自异步社区
原文链接:https://www.epubit.com/articleDetails?id=N02d1b8f1-7f44-4494-890b-91251632b7dd
- 点赞
- 收藏
- 关注作者
评论(0)