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

网站logo怎么做动态国外网站加速

网站logo怎么做动态,国外网站加速,信誉比较好的商家可做网站,ui视觉设计常用软件是什么grpc-gateway grpc-gateway 顾名思义是专门是grpc的网关。也是一个protobuf的编译器,是一个proto的插件。 grpc-gateway就是将http请求处理后转发到对应grpc服务上。很多浏览器,或者客户端开箱不支持grpc,只支持传统的restful API。 grpc网关…

grpc-gateway

grpc-gateway 顾名思义是专门是grpc的网关。也是一个protobuf的编译器,是一个proto的插件。 grpc-gateway就是将http请求处理后转发到对应grpc服务上。很多浏览器,或者客户端开箱不支持grpc,只支持传统的restful API。 grpc网关而且也支持负载,兼容不同版本。

官方文档

grpc-gateway

源码

架构

在这里插入图片描述

大致流程如下

  • 写好服务的proto文件。(代理+grpc)

  • 根据proto文件生成反向代理服务代码

  • 根据proto文件生成grpc服务存根

  • 启动反向代理和grpc

  • 客户端使用http json访问 或别的restful api形式

环境安装

protobuf

protobuf链接

下载对应环境的porotbuf。解压后bin路径配置环境变量

插件安装

博主 go 用的 1.19 + windows,预先安装好protobuf

go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc- gateway@v2.12.0 
go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2

可以把对应GO_PATH bin下插件的二进制文件拷到对应go安装的bin目录下

grpc+默认网关测试

proto文件

echo.proto

syntax = "proto3";
package  echo;
option go_package = "echo/proto";message User{int64 id = 1;string name = 2;int32 age = 3;string phone = 4;Addr addr = 5;
}
message Addr {string province = 1;string city = 2;string county = 3;
}service Echo{rpc Get(User) returns (User) {}rpc AddOrUpdate(User) returns (User) {}rpc Delete(User) returns (User) {}
}
生成grpc stub
# 生成message 
protoc --proto_path=proto --go_out=proto --go_opt=paths=source_relative proto/echo.proto 
# 生成grpc service 
protoc --proto_path=proto --go-grpc_out=proto --go-grpc_opt=paths=source_relative proto/echo.proto
生成默认网关
# 生成gateway protoc --proto_path=proto  --grpc-gateway_out=proto  --grpc-gateway_opt logtostderr=true  --grpc-gateway_opt paths=source_relative  --grpc-gateway_opt generate_unbound_methods=true  proto/echo.proto
grpc服务器代码

server.go

package serverimport ("context""echo/proto""fmt"
)type echoServer struct {proto.UnimplementedEchoServer
}func NewServer() proto.EchoServer {return &echoServer{}
}
func (s *echoServer) Get(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}
func (s *echoServer) AddOrUpdate(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}
func (s *echoServer) Delete(ctx context.Context, in *proto.User) (*proto.User, error) {fmt.Printf("%+v\n", in)return in, nil
}
gateway代码

这里直接用官网http代理的代码。需要修改端口和引用自己的grpc服务和网关package

gateway.go

package gatewayimport ("context""flag""net/http""github.com/grpc-ecosystem/grpc-gateway/v2/runtime""google.golang.org/grpc""google.golang.org/grpc/credentials/insecure"_ "google.golang.org/grpc/grpclog"gw "echo/proto"  // Update
)var (// command-line options:// gRPC server endpointgrpcServerEndpoint = flag.String("grpc-server-endpoint",  "localhost:50051", "gRPC server endpoint")
)func Run() error {ctx := context.Background()ctx, cancel := context.WithCancel(ctx)defer cancel()// Register gRPC server endpoint// Note: Make sure the gRPC server is running properly and accessiblemux := runtime.NewServeMux()opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}// 注册对应grpc服务端点handlererr := gw.RegisterEchoHandlerFromEndpoint(ctx, mux,  *grpcServerEndpoint, opts)if err != nil {return err}// Start HTTP server (and proxy calls to gRPC server endpoint)return http.ListenAndServe(":8081", mux)
}
测试

main.go

package mainimport ("context""echo/echo_server/gateway""echo/echo_server/server""echo/proto""fmt""google.golang.org/grpc""log""net""os""os/signal""time"
)func main() {// 先启动grpc servicego func() {if err := run(); err != nil {log.Fatal(err)}}()time.Sleep(time.Second * 2)//后启动gatewaygo func() {if err := gateway.Run(); err != nil {log.Fatal(err)}}()ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, os.Kill)defer stop()<-ctx.Done()
}func run() error {lis, err := net.Listen("tcp", ":50051")if err != nil {log.Fatal(err)}s := grpc.NewServer()userServiceServer := server.NewServer()proto.RegisterEchoServer(s, userServiceServer)fmt.Println("listening ")return s.Serve(lis)
}
默认路由

路由为proto文件中{包名}.{服务名}/{方法}。 gateway对外默认是post方法

PS D:\GIT\gorun\grpc-gateway-practice\echo> Invoke-RestMethod -Uri "http://10.5.81.57:8081/echo.Echo/Get" -Method Postid    : 0
name  :
age   : 0
phone :
addr  :

用postman更方便些

总结

  • grpc-gateway 只是提供一个反向代理,可以通过配置进行grpc版本兼容。

  • grpc-gateway对外提供restful API风格的http接口,更好兼容各种客户端接入,无需grpc客户端

http://www.dt0577.cn/news/52741.html

相关文章:

  • 营销型网站建设个人中小企业网络推广
  • 广州互联网网站建设百度一下官方入口
  • 网站除了做流量还需要什么软件代做网页设计平台
  • 国外高清人像图片素材网站网络营销的主要方式
  • 网站建设合同书模板网站搜索排名优化
  • 南京优化网站百度平台商家app下载
  • 昆山注册公司流程费用seo网站关键词优化哪家好
  • 企业网站建设应避免数据孤岛网络推广外包搜索手机蛙软件
  • 佛山市企业网站seo报价线上网络平台推广
  • 网站开发私活分成seo短视频网页入口引流下载
  • 西宁高端网站制作关键词在线试听
  • java是做网站的吗军事新闻最新消息今天
  • 网站建设的相关问题互联网营销师培训大纲
  • 如何在百度建设企业网站深圳最新疫情
  • wordpress文章类型查询企业网站seo优化
  • wordpress音乐源码怎样下载优化大师
  • 阜阳商城网站建设品牌整合营销传播
  • 网站做的好看术语宁波seo怎么推广
  • 做美图+网站有哪些东西百度高级搜索功能
  • 做购物网站的外挂需要自己搭建服务器吗seo百度关键词优化
  • 网站备案 查询国外免费ip地址
  • 建自己的网站做外贸长沙网站优化效果
  • 石家庄电子商城网站建设百度热门
  • 温州建设网站公司哪家好营销型网站建设目标
  • 烟台软件优化网站建设今日足球赛事分析推荐
  • 教育培训机构网站源码手机百度seo怎么优化
  • 专题网站建设方案seo自学网
  • 网站建设北京市广东深圳疫情最新情况
  • 聊城哪里网站做的好免费论坛建站系统
  • 上海哪里做网站好百度品牌专区怎么收费