通过Websocket与gRPC交互 | gRPC双向数据流的交互控制系列(2)

举报
feichaiyu 发表于 2019/12/17 20:07:24 2019/12/17
【摘要】 在本系列第一篇文章《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.epubit.com/selfpublish/article/1922)中,我们完成了通过控制台进行gRPC双向数据流交互控制的实验。但是只是用控制台交互大大限制了客户端的使用范围,如果我们要在网页或者移动端与gRPC进行双向数据流的交互怎么办?熟悉前端开发的朋友可能马上就会想到:用Websock...

在本系列第一篇文章《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

1576584209478198.png

1576584218531997.png

1576584231671901.png

1576584246787402.png

1576584258754190.png

###websocket客户端 为简便起见,本例中的客户端没有使用任何框架,而是用了最原始的html和javascript,所以界面比较简陋。我们完全可以用Angular、React、Vue、jQuery……或者基于移动端进行开发。 ####index.html

1576584283462281.png

1576584294681735.png

1576584307519206.png

###gRPC服务端 与《gRPC双向数据流的交互控制系列(1).初步实现》(https://www.epubit.com/selfpublish/article/1922)相比,server.go 做了小幅调整,主要是响应指令的条件上做了修改,读者们可以自行比较。

####server.go

1576584332880137.png

1576584341993970.png

1576584352356152.png

###运行效果 先启动服务端程序 server.go 再启动客户端程序 ws-server-grpc-client.go

打开浏览器,进入指定的地址,如 127.0.0.1:8080 输入消息,结果类似下图: 


1576584372546368.png

###小结 本文的例子充分利用了Websocket全双工通信的特性,实现了前端程序与gRPC服务端通过双向数据流进行交互。在下一篇文章中,笔者将介绍如何利用nginx最新特性实现gRPC服务端的负载均衡。


异步社区是一个有料、有货,又专业的IT专业图书社区,在这里可以读到最新、最热的IT类图书! 我想要社区的《自制编程语言——基于C语言》这本书,这本书是编译原理方面的经典图书,请大家帮我点赞!



转载声明:本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=N02d1b8f1-7f44-4494-890b-91251632b7dd


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。