网页创建站点番禺建网站公司
2026/1/28 18:41:31 网站建设 项目流程
网页创建站点,番禺建网站公司,wordpress 删除版权信息,阳谷聊城网站优化前言本文根据 https://grpc.io/docs/languages/cpp/basics/ 进行 C grpc RouteGuide示例学习运行#xff0c;主要是四种RPC类型的简单使用示例。更多的是学习记录#xff0c;水平不高#xff0c;能力有限#xff0c;错漏之处#xff0c;还请见谅。欢迎友好讨论。环境信息操…前言本文根据 https://grpc.io/docs/languages/cpp/basics/ 进行 C grpc RouteGuide示例学习运行主要是四种RPC类型的简单使用示例。更多的是学习记录水平不高能力有限错漏之处还请见谅。欢迎友好讨论。环境信息操作系统版本CentOS 7.6CMake版本4.2.0Git版本2.25.0GCC版本gcc 11.2GLIBCXX 版本libstdc.so.6.0.29伴随gcc11.2安装as ld版本: 2.45相关安装部署教程可以参考https://mp.weixin.qq.com/s/50Tep3mq7wkuCzVtAF-2DAgrpc官方仓库运行流程编译参考 https://mp.weixin.qq.com/s/50Tep3mq7wkuCzVtAF-2DA 进行编译grpc之后执行如下步骤在grpc源码文件夹下执行cd examples/cpp/route_guide运行Cmake指令export MY_INSTALL_DIRxxxxxxxx # grpc本地安装路径 mkdir -p cmake/build cd cmake/build cmake -DCMAKE_C_COMPILER/usr/local/gcc-11.2.0/bin/gcc \ # 高版本gcc位置, 如果默认版本满足需求, 则无需指定 -DCMAKE_CXX_COMPILER/usr/local/gcc-11.2.0/bin/g \ # 高版本g位置, 如果默认版本满足需求, 则无需指定 -DCMAKE_PREFIX_PATH$MY_INSTALL_DIR ../.. # 执行编译 make编译完成运行在examples/cpp/route_guide/cmake/build文件下运行服务器./route_guide_server --db_path../../route_guide_db.json重新开一个终端在examples/cpp/route_guide/cmake/build文件夹下运行客户端./route_guide_client --db_path../../route_guide_db.json个人仓库代码运行流程编译参考 https://mp.weixin.qq.com/s/50Tep3mq7wkuCzVtAF-2DA 克隆仓库 https://github.com/EarthlyImmortal/blog_code 并配置grpc依赖然后执行如下操作修改 blog_code/route_guide/start_build.sh 中的gcc和g路径在blog_code/route_guide目录下执行start_build.sh./start_build.sh运行blog_code/route_guide/build/server 文件夹下运行服务器./server --db_path../../route_guide_db.json另起一个终端在blog_code/route_guide/build/client文件夹下运行客户端./client --db_path../../route_guide_db.json这部分代码完全是copy的grpc官方的示例只对cmake文件和目录结构做了调整。个人仓库的好处是可以省去编译grpc的时间直接使用我编译好的库。下面我将对 route_guide 示例代码进行简单分析。以下分析均使用个人仓库代码测试。代码简单分析protobuf定义文件route_guide/proto/route_guide.proto主要是定义了服务和接口名以及要用到的消息结构。服务和接口名类型service在这个示例中如service RouteGuide定义的接口GetFeature(一元RPC)ListFeatures(服务器流式RPC); RecordRoute(客户端流式rpc); RecordRoute(双向流式 RPC)生成插件grpc插件文件在grpc/bin/grpc_cpp_plugin生成的文件route_guide/proto/route_guide.grpc.pb.hroute_guide/proto/route_guide.grpc.pb.cc消息结构类型message如message Point等生成插件无生成的文件route_guide/proto/route_guide.pb.hroute_guide/proto/route_guide.pb.cc暂时不对生成的文件进行分析了目前对我来说有点复杂后续再深入学习之后再进行分析。辅助函数文件route_guide/common/helper.hroute_guide/common/helper.cpp主要是为了从json文件中解析出Feature信息。Feature信息定义如下被解析的json文件路径route_guide/route_guide_db.json。这其实就是一个json形式的Feature信息列表代表一些城市的E7表示法经纬度信息可以看message Point的注释。部分数据如下客户端和服务器代码简介这个示例主要是为了展示grpc的四种rpc类型即一元 RPC(Unary RPC)、服务器流式 RPC(Server streaming RPC)、客户端流式 RPC(Client streaming RPC)、双向流式 RPC(Bidirectional streaming RPC)。因此对代码的分析也分为这四种rpc类型来看。一元 RPC(Unary RPC)接口名GetFeature协议定义服务器代码客户端代码输出信息功能介绍客户端向服务器请求点的特征信息。客户端传入一个点的信息获取这个点的特征信息。在客户端测试程序中测试了两个点从返回信息中可知这两个点一个存在特征信息指有名字信息一个不存在特征信息。服务器流式 RPC(Server streaming RPC)接口名ListFeatures协议定义服务器代码客户端代码输出信息功能介绍这个接口是客户端传给服务器一个矩形区域用两个点表示然后服务器返回给客户端在这个矩形区域范围内的所有点。与一元 RPC(Unary RPC)不同的是服务器并不是将所有的点信息在一个消息包内一次性返回的而是分多个包流式返回。这一点可以通过抓包来发现。抓包流程可以通过 抓包操作流程 一节得到。...客户端流式 RPC(Client streaming RPC)接口名RecordRoute协议定义服务器代码客户端代码输出信息功能介绍客户端向服务器发送一定数量的点服务器计算出一共有几个点这些点里面还有几个特征点指有名字信息的点位依次走过这些点的距离是多少以及依次获取一共花了多少时间。在示例代码中客户端在所有点中随机出10个点依次发给服务器每次发送一个点随机等0.5到1.5s作为从一个点到另一个点的时间。最后服务器返回经过了10个点其中4个特征点总共经过733376米花费9s。与一元 RPC(Unary RPC)不同的是。客户端并不是将所有的点信息在一个消息包内一次性发送的而是分多个包流式发送。这一点可以通过抓包来发现。抓包流程可以通过 抓包操作流程 一节得到。在客户端发送第一个点位信息之后客户端和服务器之间还会有几次交互然后才发送下一个点位信息。这些交互中有些可能是tcp底层的交互但是有些应该是带信息的业务包。不过暂时先不深究。上面用到的pb解析工具可以在blog_code/route_guide/python_tool中找到双向流式 RPC(Bidirectional streaming RPC)接口名RouteChat协议定义服务器代码客户端代码输出信息功能介绍客户端向服务器发送点位以及点位上的附加信息服务器首先遍历当前接收过的所有信息把属于同一个点位的信息返回给客户端然后把客户端传过来的信息记录下来。在这个示例中客户端发送信息是额外起一个线程去做的连续发送了4条信息其中前三条信息因为点位各不相同所以没有信息返回而第4条信息因为点位和第一条信息相同所以服务器会返回第一条信息。如果我们在不停止服务器的情况下连续两次运行客户端可以得到如下输出。可以发现因为第一轮运行的时候已经在点位(0,0) 写入First和Fourth两条信息所以在第二轮运行再次向点位(0,0) 发送First信息的时候对应会有两条信息从服务器返回其他的依次类推。同样我们可以抓包分析这些信息客户端和服务器均为多次流式发送的这里不再展开。抓包操作流程安装wiresharksudo yum install -y wireshark wireshark-gnome # 这里连图形界面一起安装, 虽然暂时没有用到使用tcpdump抓包sudo tcpdump -i any -s 0 -w grpc_stream.pcap port 50051 # -i any: 监听所有网络接口 # -s 0: 设置快照长度snaplen为0确保捕获每个数据包的完整内容避免截断 # -w grpc_stream.pcap: 将原始数据包保存到文件这是后续分析的基础 # port 50051: 过滤器只捕获与该端口相关的流量大幅减少干扰使用tshark分析tshark -r grpc_stream.pcap -V tmp.txt说明鉴于时间和水平原因有些通讯细节并未深究比如在流式RPC中客户端和服务器之间应该有一些额外的交互。学习是一个逐渐深入的过程后续会逐步搞清楚。参考资料腾讯元宝-deepseek(https://yuanbao.tencent.com/)和deepseek官方网站(https://www.deepseek.com/)辅助https://grpc.io/docs/languages/cpp/basics/https://mp.weixin.qq.com/s/50Tep3mq7wkuCzVtAF-2DA欢迎关注公众号只做人间不老仙

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询