当前位置: 首页 > news >正文

做网站需要域名还需要什么哈尔滨市住房与城乡建设局网站

做网站需要域名还需要什么,哈尔滨市住房与城乡建设局网站,百度指数官网入口登录,wordpress怎么作模版gRPC 通信 RPC 介绍 RPC, Remote Procedure Call#xff0c;远程过程调用。与 HTTP 一致#xff0c;也是应用层协议。该协议的目标是实现#xff1a;调用远程过程#xff08;方法、函数#xff09;就如调用本地方法一致。 如图所示#xff1a; 说明#xff1a; Servi…gRPC 通信 RPC 介绍 RPC, Remote Procedure Call远程过程调用。与 HTTP 一致也是应用层协议。该协议的目标是实现调用远程过程方法、函数就如调用本地方法一致。 如图所示 说明 ServiceA 需要调用 ServiceB 的 FuncOnB 函数对于 ServiceA 来说 FuncOnB 就是远程过程 RPC 的目的是让 ServiceA 可以像调用 ServiceA 本地的函数一样调用远程函数 FuncOnB也就是 ServieA 上代码层面使用serviceB.FuncOnB() 即可完成调用 RPC 是 C/S 模式调用方为 Client远程方为 Server RPC 把整体的调用过程数据打包、网络请求等封装完毕在 C、S 两端的 Stub 中。Stub代码存根 调用流程如下 ServiceA 将调回需求告知 Client Sub Client Sub 将调用目标Call ID、参数数据params等调用信息进行打包序列化并将打包好的调用信息通过网络传输给 Server Sub Server Sub 将根据调用信息调用相应过程。期间涉及到数据的拆包反序列化等操作。 远程过程 FuncOnB 运行并得到结果将结果告知 Server Sub Server Sub 将结果打包并传输回给 Client Sub Client Sub 将结果拆包把最终函数调用的结果告知 ServiceA 以上就是典型 RPC 的流程。 RPC 协议没有对网络层做规范那也就意味着具体的 RPC 实现可以基于 TCP也可以基于其他协议例如 HTTPUDP 等。RPC 也没有对数据传输格式做规范也就是逻辑层面传输 JSON、Text、protobuf 都可以。这些都要看具体的 RPC 产品的实现。广泛使用的 RPC 产品有 gRPCThrift 等。 gRPC 介绍 gPRC 官网https://grpc.io/上的 Slogan 是A high performance, open source universal RPC framework。就是一个高性能、开源的通用 RPC 框架。 支持多数主流语言C#、C、Dart、Go、Java、Kotlin、Node、Objective-C、PHP、Python、Ruby。其中 Go 支持 Windows, Linux, Mac 上的 Go 1.13 版本。 gRPC 是一个 Google 开源的高性能远程过程调用 (RPC) 框架可以在任何环境中运行。它可以通过对负载平衡、跟踪、健康检查和身份验证的可插拔支持有效地连接数据中心内和跨数据中心的服务。它也适用于分布式计算的最后一步将设备、移动应用程序和浏览器与后端服务接。 在 gRPC 中客户端应用程序可以直接调用不同机器上的服务器应用程序的方法就像它是本地对象一样使您更容易创建分布式应用程序和服务。与许多 RPC 系统一样gRPC 基于定义服务的思想指定可以远程调用的方法及其参数和返回类型。在服务端服务端实现这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端客户端有一个存根在某些语言中仅称为客户端它提供与服务器相同的方法。 技术上gRPC 基于 HTTP/2 通信采用 Protocol Buffers 作数据序列化。 准备 gRPC 环境 使用 gRPC 需要 Go Protocol Buffer 编译器protoc推荐版本3 Go Plugin用于 Protocol Buffer 编译器 安装 protoc 可以使用 yum 或 apt 包管理器安装但通常版本会比较滞后。因此更建议使用预编译的二进制安装。 下载地址 https://github.com/protocolbuffers/protobuf/releases 基于系统和版本找到合适的二进制下载并安装。 CentOS 演示 # 下载特定版本当前2022年08月最新 21.4$ curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v21.4/protoc-21.4-linux-x86_64.zip# 解压到特定目录$ sudo unzip protoc-21.4-linux-x86_64.zip -d /usr/local# 如果特定目录中的bin不在环境变量 path 中手动加入 path​# 测试安装结果注意版本应该是 3.x$ protoc --versionlibprotoc 3.21.4 Win 演示下载解压到指定目录在 CMD 中运行 # 解压到指定目录即可要保证 protoc/bin 位于环境变量 path 中可以随处调用 protoc.exe --versionlibprotoc 3.21.4​ 安装 Go Plugin # 下载特定版本当前2022年08月最新 v1.28.1 go install google.golang.org/protobuf/cmd/protoc-gen-golatest# 下载特定版本当前2022年08月最新 v1.2.0 go install google.golang.org/grpc/cmd/protoc-gen-go-grpclatest# 安装完毕后要保证 $GOPATH/bin 位于环境变量 path 中​# 测试安装结果 protoc-gen-go --versionprotoc-gen-go.exe v1.28.1 protoc-gen-go-grpc --versionprotoc-gen-go-grpc 1.2.0 Protocol Buffer 的基础使用 默认情况下gRPC 使用 Protocol Buffers这是 Google 用于序列化结构化数据的成熟开源机制尽管它可以与 JSON 等其他数据格式一起使用。 Protocol Buffers 的文档https://developers.google.com/protocol-buffers/docs/overview 使用 Protocol Buffers 的基本步骤是 使用 protocol buffers 语法定义消息消息是用于传递的数据 使用 protocol buffers 语法定义服务服务是 RPC 方法的集合来使用消息 使用 Protocol Buffer编 译工具 protoc 来编译生成对应语言的代码例如 Go 的代码 使用 Protocol Buffers 的第一步是在 .proto 文件中定义序列化的数据的结构.proto 文件是普通的文本文件。Protocol Buffers 数据被结构化为消息其中每条消息都是一个小的信息逻辑记录包含一系列称为字段的 name-value 对。 除了核心内容外.proto 文件还需要指定语法版本目前主流的也是最新的 proto3 版本。在 .proto 文件的开头指定。 一个简单的产品信息示例 product.proto syntax proto3;​// 定义 Product 消息message Product {string name 1;int64 id 2;bool is_sale 3;} 第二步是在 .proto 文件中定义 gRPC 服务将 RPC 方法参数和返回类型指定为 Protocol Buffers 消息继续编辑 product.proto : syntax proto3;​// 为了生成 go 代码需要增加 go_package 属性表示代码所在的包。protoc 会基于包构建目录option go_package ./proto-codes;​// 定义 ProductInfo 消息message ProductInfoResponse {string name 1;int64 int64 2;bool is_sale 3;}​// rpc 方法 ProductInfo 需要的参数消息message ProductInfoRequest {int64 int64 1;}​// 定义 Product 服务service Product {// 获取产品信息rpc ProductInfo (ProductInfoRequest) returns (ProductInfoResponse) {}} 第三步是使用 protoc 工具将 .proto 定义的消息和包含 rpc 方法的服务编译为目标语言的代码我们选择 Go 代码。 $ protoc --go_out. --go-grpc_out. product.proto# --go_out *.pb.go 目录# --go-grpc_out *_grpc.pb.go 目录 其中 *.pb.go 包含消息类型的定义和操作的相关代码 *_grpc.pb.go 包含客户端和服务端的相关代码 生成的代码主要是结构上的封装在继续使用时还需要继续充实业务逻辑。 基于 gRPC 的服务间通信示例 示例说明存在两个服务订单服务和产品服务。其中 订单服务提供 HTTP 接口用于完成订单查询。订单中包含产品信息要利用 grpc 从产品服务获取产品信息 产品服务提供 grpc 接口用于响应微服务内部产品信息查询 本例中对于 grpc 来说产品服务为服务端、订单服务为客户端。 同时不考虑其他业务逻辑例如产品服务也需要对外提供 http 接口等仅在乎 grpc 的通信示例。同时不考虑服务发现和网关等。 编码实现 一基于之前定义的 .proto 文件生成 pb.go 文件 注意客户端和服务端都需要使用生成的 pb.go 文件 二实现订单服务 orderService/httpService.go package main​import (contextencoding/jsonflagfmtgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecurelognet/httporderService/protos/codestime)​var (// 目标 grpc 服务器地址gRPCAddr flag.String(grpc, localhost:50051, the address to connect to)// http 命令行参数addr flag.String(addr, 127.0.0.1, The Address for listen. Default is 127.0.0.1)port flag.Int(port, 8080, The Port for listen. Default is 8080.))​func main() {flag.Parse()// 连接 grpc 服务器conn, err : grpc.Dial(*gRPCAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {log.Fatalf(did not connect: %v, err)}defer conn.Close()// 实例化 grpc 客户端c : codes.NewProductClient(conn)​// 定义业务逻辑服务假设为产品服务service : http.NewServeMux()service.HandleFunc(/orders, func(writer http.ResponseWriter, request *http.Request) {// 调用 grpc 方法完成对服务器资源请求ctx, cancel : context.WithTimeout(context.Background(), time.Second)defer cancel()r, err : c.ProductInfo(ctx, codes.ProductInfoRequest{Int64: 42,})if err ! nil {log.Fatalln(err)}​resp : struct {ID       int                          json:idQuantity int                          json:quantityProducts []*codes.ProductInfoResponse json:products}{9527, 1,[]*codes.ProductInfoResponse{r,},}respJson, err : json.Marshal(resp)if err ! nil {log.Fatalln(err)}writer.Header().Set(Content-Type, application/json)_, err fmt.Fprintf(writer, %s, string(respJson))if err ! nil {log.Fatalln(err)}})​// 启动监听address : fmt.Sprintf(%s:%d, *addr, *port)fmt.Printf(Order service is listening on %s.\n, address)log.Fatalln(http.ListenAndServe(address, service))} 三实现产品服务 productService/grpcService.go package mainimport (contextflagfmtgoogle.golang.org/grpclognetproductService/protos/compiles )//grpc 监听端口 var port flag.Int(port, 50051, The server port)// ProductServer 实现 UnimplementedProductServer type ProductServer struct {compiles.UnimplementedProductServer }func (ProductServer) ProductInfo(ctx context.Context, pr *compiles.ProductInfoRequest) (*compiles.ProductInfoResponse, error) {return compiles.ProductInfoResponse{Name: 马士兵 Go 云原生,Int64: 42,IsSale: true,}, nil }func main() {flag.Parse()//设置 tcp 监听器lis, err : net.Listen(tcp, fmt.Sprintf(:%d, *port))if err ! nil {log.Fatalf(failed to listen: %v, err)}// 新建 grpc Servers : grpc.NewServer()// 将 ProductServer 注册到 grpc Server 中compiles.RegisterProductServer(s, ProductServer{})log.Printf(server listening at %v, lis.Addr())// 启动监听if err : s.Serve(lis); err ! nil {log.Fatalf(failed to serve: %v, err)} }测试访问 order 的 http 接口。获取订单信息中包含产品信息。 gRPC 核心概念
http://www.dnsts.com.cn/news/44294.html

相关文章:

  • 网站建设 排行找人搭建网站多少钱
  • 公司网站做地图地址哈尔滨门户网站建站
  • 请写出网站建设前期需要做的准备局域网 手机网站建设
  • 怎么查看网站是否做静态化处理境外公司注册
  • 网页设计与网站建设书商贸有限公司经营范围
  • 南通网站制作外包南昌网站建设公司市场
  • 没学过计算机开始学做网站qq邮箱在线登录网页版
  • 百度网站空间html菜鸟工具
  • 肇庆北滘网站设计可以做网站的编程有什么
  • 兰州市网站建设网站被墙了什么意思
  • 网站 php .net手机网站建设机构
  • 企业网站可以免费做吗feed wordpress
  • 佛山网站制作流程wordpress博客空间
  • 网络公司如何建网站化妆品商城网站建设
  • 设计师一般是什么学历邢台seo技术
  • qq临时会话网站c语言软件开发和网站开发区别
  • 网站技术方案说明优是是什么网站
  • 站长平台工具建设网站通过什么赚钱
  • 本地网站模板修改如何设立网站
  • 小学网站建设情况汇报旅业认证二维码有什么用
  • 给实体店老板做的网站网页制作考证视频
  • 建设部网站统计m开头的网站建设公司
  • 南阳做网站许昌市网站建设
  • 跟我学做纸艺花网站有帮忙做网站的吗
  • 优质的南昌网站建设女和男做的视频网站
  • 服装网站建设教程WordPress主题里的AD
  • 广州市规划建设局网站花多少钱能把网站做到页面
  • 清远市建设局官方网站提供网站建设的功能
  • 有网站开发专业吗wordpress博客主题acg
  • 淄博网站排名外包软件开发公司账务处理