前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >grpc streaming实战

grpc streaming实战

作者头像
公众号guangcity
发布2023-09-26 16:37:31
2180
发布2023-09-26 16:37:31
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

grpc streaming实战

前段时间看到开源项目中使用到grpc streaming接口,趁此机会学习一下,找了个很久之前的官方demo,RouteGuide,将其代码适配到最新grpc版本,这个小项目非常的齐全,涉及到:

  • 业务场景
  • 单向流写操作
  • 单向流读操作
  • 双向流读写操作
  • json模拟数据DB

业务场景为:地理位置信息和路线导航服务。

1.数据格式

数据存储以json文件存储,里面包含了多个经纬度信息,具体字段如下:

代码语言:javascript
复制
{
    "location": {
        "latitude": 412567807,
        "longitude": -741058078
    },
    "name": "New York State Reference Route 987E, Southfields, NY 10975, USA"
}

随后我们便可以写一个json解析工具将其读取,服务端/客户端便可以基于这份数据进行RPC接口的通信。

2.RPC接口

  • GetFeature接口

获取给定位置的地理特征,如果在给定位置没有地理特征,则返回一个空名称的特征。

代码语言:javascript
复制
 rpc GetFeature(Point) returns (Feature) {}
  • ListFeatures接口

服务器到客户端的流式 RPC。

获取给定矩形范围内可用的地理特征。结果是以流的方式传送,而不是一次性返回。

代码语言:javascript
复制
rpc ListFeatures(Rectangle) returns (stream Feature) {}
  • RecordRoute

客户端到服务器的流式 RPC。接受一系列正在遍历的路线上的点流,并在遍历完成时返回 RouteSummary。

代码语言:javascript
复制
rpc RecordRoute(stream Point) returns (RouteSummary) {}
  • RouteChat

双向流式 RPC。接受在遍历路线时发送的一系列 RouteNotes 消息,同时接收其他 RouteNotes(例如,来自其他用户)。

代码语言:javascript
复制
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}

3.演示

3.1 GetFeature

获取给定位置的地理特征

询问服务端这份数据是否存在:

代码语言:javascript
复制
point = MakePoint(409146138, -746188906);

输出:

代码语言:javascript
复制
-------------- GetFeature --------------
Found feature called BerkshireValleyManagementAreaTrail,Jefferson,NJ,USA at 40.9146, -74.6189
Found no feature at 0, 0

3.2 基于ServerWriter的ListFeatures

查询矩阵内的地理信息

代码语言:javascript
复制
rect.mutable_lo()->set_latitude(400000000);
rect.mutable_lo()->set_longitude(-750000000);
rect.mutable_hi()->set_latitude(420000000);
rect.mutable_hi()->set_longitude(-730000000);
std::cout << "Looking for features between 40, -75 and 42, -73"
          << std::endl;

输出:

代码语言:javascript
复制
-------------- ListFeatures --------------
Looking for features between 40, -75 and 42, -73
Found feature called PatriotsPath,Mendham,NJ07945,USA at 40.7838, -74.6144
Found feature called 101NewJersey10,Whippany,NJ07981,USA at 40.8123, -74.3999
Found feature called U.S.6,Shohola,PA18458,USA at 41.3628, -74.9016
Found feature called 5ConnersRoad,Kingston,NY12401,USA at 42, -74.0371
Found feature called MidHudsonPsychiatricCenter,NewHampton,NY10958,USA at 41.4008, -74.3951
Found feature called 287FlugertownRoad,LivingstonManor,NY12758,USA at 41.9611, -74.6525
Found feature called 4001TremleyPointRoad,Linden,NJ07036,USA at 40.611, -74.2187
Found feature called 352SouthMountainRoad,Wallkill,NY12589,USA at 41.6802, -74.237
Found feature called BaileyTurnRoad,Harriman,NY10926,USA at 41.295, -74.1077
Found feature called 193-199WawayandaRoad,Hewitt,NJ07421,USA at 41.2145, -74.395
Found feature called 406-496WardAvenue,PineBush,NY12566,USA at 41.5737, -74.2848
Found feature called 162MerrillRoad,HighlandMills,NY10930,USA at 41.3844, -74.0502
Found feature called ClintonRoad,WestMilford,NJ07480,USA at 41.0873, -74.4459
...

3.3 基于ClientWriter的RecordRoute

输出:

代码语言:javascript
复制
-------------- RecordRoute --------------
Visiting point 41.9611, -74.6525
Visiting point 40.7587, -74.167
Visiting point 41.5302, -74.8416
Visiting point 40.8032, -74.8645
Visiting point 40.0273, -74.1221
Visiting point 41.5302, -74.8416
Visiting point 41.2856, -74.5149
Visiting point 40.9224, -74.8287
Visiting point 40.1263, -74.7964
Visiting point 40.9533, -74.2201
Finished trip with 10 points
Passed 7 features
Travelled 887071 meters
It took 11 seconds

3.4 基于双向流的RouteChat

ClientReaderWriter + ServerReaderWriter

代码语言:javascript
复制
-------------- RouteChat --------------
Sending message First message at 0, 0
Sending message Second message at 0, 1
Sending message Third message at 1, 0
Sending message Fourth message at 0, 1
Got message Second message at 0, 1
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-09-26 11:36,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • grpc streaming实战
  • 2.RPC接口
  • 3.演示
    • 3.1 GetFeature
      • 3.2 基于ServerWriter的ListFeatures
        • 3.3 基于ClientWriter的RecordRoute
          • 3.4 基于双向流的RouteChat
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档