游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go玩转gRPC通信

  欢迎地鼠同胞!很多人要求我写一篇关于gRPC主题的教程,以及如何在Go中编写自己的基于gRPC的系统。因此,在本教程中,我们将深入了解gRPC精彩而令人兴奋的世界,并探索我们如何利用它来获得名利!
  我们将深入研究gRPC背后的理论,以及为什么与HTTPRESTAPI等更传统的设置相比,它在某些情况下会更好。
  一旦我们掌握了gRPC如何使我们的系统受益的问题,我们将看看如何构建用Go编写的简单gRPC客户端和服务器!
  先决条件
  在完成本教程之前,您必须在您的机器上安装以下内容:已安装ProtocolBuffersv3这可以通过运行来完成gogetugithub。comgolangprotobufprotocgengo
  您必须确保它GOPATHbin位于您的环境路径中,以便您可以protoc在本教程后面使用该工具。gRPC简介
  因此,在深入研究之前,我们首先需要了解gRPC是什么,它是如何工作的等等。
  定义gRPC是一个现代的、开源的远程过程调用(RPC)框架,可以在任何地方运行
  远程过程调用是我们在分布式系统中使用的东西,它允许我们在应用程序之间进行通信。更具体地说,它允许我们在我们的应用程序中公开我们希望其他应用程序能够调用的方法。
  它类似于RESTAPI通信,通过它,您可以有效地将应用程序中的功能公开给使用HTTP连接作为通信媒介的其他应用程序。gRPC和REST的区别
  虽然REST和gRPC有点相似,但您应该注意它们的工作方式存在一些根本差异。gRPC利用HTTP2而REST利用HTTP1。1gRPC使用协议缓冲区数据格式,而不是通常在RESTAPI中使用的标准JSON数据格式使用gRPC,您可以根据需要利用HTTP2服务器端流式传输、客户端流式传输甚至双向流式传输等功能。gRPC的挑战
  您应该记住,虽然gRPC确实允许您利用这些更新的技术,但由于无法使用PostmanHTTP客户端等工具来轻松与暴露的gRPC交互,因此对gRPC服务进行原型设计更具挑战性服务。
  您确实有使这成为可能的选项,但这并不是本机即可获得的。有一些选项可以使用诸如envoy之类的工具来反向代理标准JSON请求并将它们转码为正确的数据格式,但这是一个额外的依赖项,对于简单项目的设置可能会很棘手。在Go中构建gRPC服务器
  让我们从在Go中定义一个非常简单的gRPC服务器开始。一旦我们有一个简单的服务器启动并运行,我们就可以着手创建一个能够与之交互的gRPC客户端。
  我们将首先在main函数中编写逻辑来侦听传入TCP连接的端口:
  main。gopackagemainimport(lognet)funcmain(){lis,err:net。Listen(tcp,:9000)iferr!nil{log。Fatalf(failedtolisten:v,err)}}
  接下来,我们gRPC要从中导入官方包,golang。org以便我们可以创建一个新的gRPC服务器,然后在通过我们TCP上面定义的现有连接提供服务之前注册我们想要公开的端点:
  main。gopackagemainimport(lognetgoogle。golang。orggrpc)funcmain(){lis,err:net。Listen(tcp,:9000)iferr!nil{log。Fatalf(failedtolisten:v,err)}grpcServer:grpc。NewServer()iferr:grpcServer。Serve(lis);err!nil{log。Fatalf(failedtoserve:s,err)}}
  这是用go编写的gRPC服务器的绝对最低要求。但是,现在它并没有做太多。添加一些功能
  让我们看看我们如何开始通过我们的gRPC服务器公开一些功能,以便gRCP客户端可以以有意义的方式与我们的服务器交互。
  让我们首先定义chat。proto将作为我们的合约的文件:
  聊天。protosyntaxproto3;packagechat;messageMessage{stringbody1;}serviceChatService{rpcSayHello(Message)returns(Message){}}
  该。proto文件公开了我们的ChatService其中一个SayHello功能,该功能可以由任何用任何语言编写的gRPC客户端调用。
  这些。proto定义通常在各种形状和大小的客户端之间共享,以便它们可以生成自己的代码来与我们的gRPC服务器通信。
  让我们使用该protoc工具生成Go特定的gRPC代码:protocgooutpluginsgrpc:chatchat。proto
  您会看到这将生成一个chatchat。pb。go包含生成代码的文件,以便我们在代码中轻松调用。让我们更新我们的server。go以注册我们的ChatService,如下所示:
  服务器。gopackagemainimport(fmtlognetgithub。comtutorialedgegogrpcbeginnerstutorialchatgoogle。golang。orggrpc)funcmain(){fmt。Println(GogRPCBeginnersTutorial!)lis,err:net。Listen(tcp,fmt。Sprintf(:d,9000))iferr!nil{log。Fatalf(failedtolisten:v,err)}s:chat。Server{}grpcServer:grpc。NewServer()chat。RegisterChatServiceServer(grpcServer,s)iferr:grpcServer。Serve(lis);err!nil{log。Fatalf(failedtoserve:s,err)}}
  然后我们将不得不定义SayHello接收a的方法Message,读取消息的正文,然后返回Message它自己的a:
  聊天chat。gopackagechatimport(loggolang。orgxnetcontext)typeServerstruct{}func(sServer)SayHello(ctxcontext。Context,inMessage)(Message,error){log。Printf(Receivemessagebodyfromclient:s,in。Body)returnMessage{Body:HelloFromtheServer!},nil}
  如果我们想为我们的gRPC服务器定义更高级的功能,那么我们可以通过定义一个从我们的服务器构建的新方法struct,然后将该函数的名称添加到我们的chat。proto文件中,以便我们的应用程序可以将其公开为其他gRPC客户端的东西可以打。
  完成这些最终更改后,让我们尝试运行我们的服务器:gorunserver。goGogRPCBeginnersTutorial!
  惊人的!我们现在localhost:9000在我们的机器上启动并运行了一个全新的、闪亮的新gRPC服务器!在Go中构建gRPC客户端
  现在我们的服务器已经启动并运行了,让我们看看如何构建一个能够与之交互的简单客户端。
  客户端。gopackagemainimport(loggolang。orgxnetcontextgoogle。golang。orggrpcgithub。comtutorialedgegogrpcbeginnerstutorialchat)funcmain(){varconngrpc。ClientConnconn,err:grpc。Dial(:9000,grpc。WithInsecure())iferr!nil{log。Fatalf(didnotconnect:s,err)}deferconn。Close()c:chat。NewChatServiceClient(conn)response,err:c。SayHello(context。Background(),chat。Message{Body:HelloFromClient!})iferr!nil{log。Fatalf(ErrorwhencallingSayHello:s,err)}log。Printf(Responsefromserver:s,response。Body)}
  当我们运行它时,我们应该看到我们的客户端Hello从服务器收到了一个非常好的消息,如下所示:gorunclient。go2020043020:10:09Responsefromserver:HelloFromtheServer!
  太棒了,我们已经成功创建了一个非常简单的gRPC客户端,它现在可以与我们的新gRPC服务器通信了!挑战
  挑战添加一个新方法调用BroadcastMessage到我们的gRPC服务器。
  挑战剧透
  首先修改chat。proto包含gRPC合约的文件。您将新rpc定义添加到您ChatService的名称中BroadcastMessage:syntaxproto3;packagechat;messageMessage{stringbody1;}serviceChatService{rpcSayHello(Message)returns(Message){}rpcBroadcastMessage(Message)returns(Message){}}
  有了这个,你就想chat。pb。go从这个更新的合同中重新生成你的文件:protocgooutpluginsgrpc:chatchat。proto
  然后您必须将此方法定义添加到您的chatchat。go文件中:packagechatimport(loggolang。orgxnetcontext)typeServerstruct{}func(sServer)SayHello(ctxcontext。Context,inMessage)(Message,error){log。Printf(Receivemessagebodyfromclient:s,in。Body)returnMessage{Body:HelloFromtheServer!},nil}func(sServer)BroadcastMessage(ctxcontext。Context,inMessage)(Message,error){log。Printf(Broadcastingnewmessagefromaclient:s,in。Body)returnMessage{Body:Broadcastedmessage!},nil}
  最后,您可以更新client。go代码以调用这个新的gRPC端点:packagemainimport(loggolang。orgxnetcontextgoogle。golang。orggrpcgithub。comtutorialedgegogrpcbeginnerstutorialchat)funcmain(){varconngrpc。ClientConnconn,err:grpc。Dial(:9000,grpc。WithInsecure())iferr!nil{log。Fatalf(didnotconnect:s,err)}deferconn。Close()c:chat。NewChatServiceClient(conn)response,err:c。SayHello(context。Background(),chat。Message{Body:HelloFromClient!})iferr!nil{log。Fatalf(ErrorwhencallingSayHello:s,err)}log。Printf(Responsefromserver:s,response。Body)response,errc。BroadcastMessage(context。Background(),chat。Message{Body:MessagetoBroadcast!})iferr!nil{log。Fatalf(ErrorwhencallingBroadcastMessage:s,err)}log。Printf(Responsefromserver:s,response。Body)}
  惊人的!您已成功添加新的gRPC端点!结论
  因此,在本教程中,我们研究了如何在Go中构建一个简单的gRPC客户端和服务器。我们构建了一个基本服务器,它接受来自客户端的传入消息,然后向这些客户端返回响应。
  现在,这只是我深入研究gRPC的开始,在接下来的几周内,我们将扩展本文中提出的基础,我们将研究更复杂的主题,例如身份验证和授权以及双路流媒体!

戴上助听器能听到声音就一定能听懂语言吗?戴上助听器能听到声音,不一定能听懂语言。要使聋人听到声音相对较容易,即使仅有较少残留听力的聋人,经助听器放大也能听到声音,但要达到能听懂声音并不容易。能听清楚声音是听懂语言的关……曝iPhone13贴纸被破解,不撕封条取出手机?还能二手机秒在iPhone13系列新品发布会上,苹果为了提倡环保,取消了原来一直使用的塑封膜包装,首次采用了一体式的手撕封条(与快递的文件袋一样的封签式设计),这个小变动可以节省600吨塑……小米真香5G中端机,骁龙87012GB256GB跌至2399今年以来小米发布了很多款5G手机,小米11系列中就有三款搭载骁龙888的旗舰机,还有搭载骁龙870的小米10S,下半年搭载屏下摄像头的小米MIX4,以及主打线下市场的小米Civ……iphone11买哪个颜色好?作为用着苹果11绿色款的建议,给你一个建议,就是购买紫色呀。紫色白色。绿色黄色黑色红色。我们可以看到苹果11一共有6款新型。分别是紫色绿色白色黄色黑色红色。如果你不带手机……电动汽车初创公司VoltaTrucksC轮融资2。6亿美元来源:盖世汽车刘丽婷据外媒报道,电动商用卡车初创公司VoltaTrucks宣布在C轮融资中筹集了2。6亿美元。此轮融资由纽约对冲基金LuxorCapital牵头,且该基金……能否超越微信?微信是国民软件,目前是无法撼动的。但是随着监管越来越严,约束越来越多,以及5G消息的推出,以后的命运也难以预测。今日头条具有自媒体创作盈利功能,能把所思所想所遇见记录下来……有多少人用的是10元以下手机卡,或是套餐的?用的怎么样?我2016年以前用的移动卡8元的,之后用上联通宽带后手机不需要卡了,可以直接用手机了,但必须用身份证照片、号码及个人的所有信息为证。我用的是移动8元套餐,从来不打电话也不……芯片之争,中国绝非无能为力!德媒美国卡脖子无法让中国屈服图为华为现在,人们的生活和芯片是分不开的。手拿遥控器打开电视机,拿手机探知外面的世界以及在电脑上工作,这一切都离不开芯片。世界上第一块集成电路诞生于1958年,迄今已有6……天猫开始减免商家年费了,阿里系电商开始走下坡路了吗?不是开始走下坡路了,是已经在路上,把简单的事情复杂化,为了多收利润我们公司之前入驻了天猫,认真经营3年,同时还进入了京东自营,然而天猫处处卡脖子,类目不给开说是跨类目不行……华为和高通谁的5G技术更好一点?应邀回答本行业问题。其实就5G而言,也没有什么高通的5G,也没有什么华为的5G。现在我们说的5G,都是特指的3GPP的5GNR。5G是第五代移动通信制式,现在就全球……技术分享MySQLchangebuffer何时生效作者:胡呈清爱可生DBA团队成员,擅长故障分析、性能优化,个人博客:https:www。jianshu。comua95ec11f67a8,欢迎讨论。本文来源:原创投……2035年跨境电商将在外贸中占比约50每晚为您聚合各大电商企业的商业资讯,智能商业、跨境电商、农村电商、工业电商四大核心领域尽在其中。中科知道获1200万人民币天使轮融资;飞恩微电子获数亿人民币战略融资;飞恩……
星越L,贵了?吉利,飘了?5月25日,在经历了一系列预热活动之后,星越L开始了全球预售!预售价格公布,褒贬不一!相当一部分车友的看法是吉利飘了,星越L的这个定价高了,价格毫无诚意……零延时超高清,5G让远程会诊成为可能自2019至今,说到热门话题,5G势必是首要焦点之一。现今,随着大数据时代进程的推进,以5G、人工智能、工业互联网、物联网等为代表的新基建得到加速发展。5G,因其具有高速率、大……3090显卡超旗舰决斗买不起还不能看看吗?3090显卡,作为21年的卡皇稳坐性能第一的宝座。各家品牌对于3090显卡的堆料也是毫无保留。测评选择的卡都为各个品牌的最高端旗舰,详细对比各个品牌的区别。具体有猛禽、超……16岁赚100万,19岁成亿万富翁,曾是败家子的他如何咸鱼翻16岁时你在做什么?刚上高一,为赋新词强说愁;18岁时你在做什么?面对高考,对空长叹人生不易;19岁时你在做什么?摆脱父母,终于穿上大人的外衣。大多数人,都过……最新!中芯国际将5nm和3nm芯片有序展开,只等光刻机了。消息领先一步,财富更近一步。哈喽大家好,我是你们的朋友沫然,今天给大家带来最新科技领域资讯,接下来看一吧。光刻机大家都知道,有名的顶尖的光刻机那就属荷兰的阿斯麦光刻……三大运营商及铁塔公司2016年大事记2016年马上就要过去了,昨天U学在线和大家一起回顾了今年通信行业的十件大事,今天我们再来看一下在这一年里,三大运营商和铁塔公司都发生了哪些大事。中国移动2016年大事记……德国Galileo系列纪录片采用DaVinciResolveBlackmagicDesign今日发布消息称,为ProSieben电视网历史悠久的Galileo节目所制作的一组特别节目,采用DaVinciResolveStudio完成剪辑……windows10专业版任务栏跑到屏幕左侧的解决方法有深度技术网友在使用windows10专业版电脑的时候,不知道怎么回事桌面任务栏跳到屏幕的左侧,虽然能够正常使用,但操作非常不方便,其实出现这个问题,我们只要简单设置一下即可,……工程必看电线电缆在现场检查的一些方法电线电缆商品广泛运用于制造业企业生产和人民群众日常日常生活。从近几年来对电线电缆商品的综合执法情况看,商品假冒伪劣,假冒伪劣产品的状况较为较为严重,凸起的难点是电线电缆厂……河南遭遇特大暴雨,对我们有什么警示河南这几天正在遭遇特大的暴雨,这几天的降雨可能是一年的量,全国人民都在关心这件事,虽然现在趋于重建河南的恢复,但是这此的灾难对我们有什么警示呢?首先国家电网一线维修……陕西旬邑剪花娘子库淑兰困苦一生民间工艺美术大师享誉国内外在陕西省咸阳市旬邑县有一位剪花娘子,库淑兰生于一个贫苦农民家庭,一生饱受困苦折磨。但她在剪纸艺术上可谓登峰造极,1996年,她被联合国科教文组织授予民间工艺美术大师称号,是首位……数字经济跃进,中国电商发展再度步入快车道《中国互联网发展报告2021》蓝皮书26日在2021年世界互联网大会乌镇峰会上发布。报告指出,2020年中国数字经济规模达到39。2万亿元,占GDP比重达38。6,保持9……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网