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

做网站跳转怎么收费旺道seo推广系统怎么收费

做网站跳转怎么收费,旺道seo推广系统怎么收费,漳州市住房建设局网站,营销公司网站模板gone是可以高效开发Web服务的Golang依赖注入框架 github地址:https://github.com/gone-io/gone 文档地址:https://goner.fun/zh/ 文章目录 使用gRPC通信编写proto文件,生成golang代码编写服务端代码注册客户端编写配置文件测试总结 使用gRPC通…

gone是可以高效开发Web服务的Golang依赖注入框架
github地址:https://github.com/gone-io/gone
文档地址:https://goner.fun/zh/

文章目录

  • 使用gRPC通信
    • 编写proto文件,生成golang代码
    • 编写服务端代码
    • 注册客户端
    • 编写配置文件
    • 测试
    • 总结

使用gRPC通信

首先创建一个grpc目录,在这个目录中初始化一个golang mod:

mkdir grpc
cd grpc
go mod init grpc

编写proto文件,生成golang代码

  • 编写协议文件
    定义一个简单的Hello服务,包含一个Say方法
    文件名:proto/hello.proto
syntax = "proto3";option go_package="/proto";package Business;service Hello {rpc Say (SayRequest) returns (SayResponse);
}message SayResponse {string Message = 1;
}message SayRequest {string Name = 1;
}
  • 生成golang代码
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
proto/hello.proto

其中,protoc的安装参考Protocol Buffer 编译器安装

编写服务端代码

文件名:server/main.go

package mainimport ("context""github.com/gone-io/gone""github.com/gone-io/gone/goner""github.com/gone-io/gone/goner/cmux""google.golang.org/grpc""grpc/proto""log"
)type server struct {gone.Flagproto.UnimplementedHelloServer // 嵌入UnimplementedHelloServer
}// 重载协议中定义的服务
func (s *server) Say(ctx context.Context, in *proto.SayRequest) (*proto.SayResponse, error) {log.Printf("Received: %v", in.GetName())return &proto.SayResponse{Message: "Hello " + in.GetName()}, nil
}// 实现 gone_grpc.Service接口的RegisterGrpcServer方法,该方法在服务器启动时会被自动调用
func (s *server) RegisterGrpcServer(server *grpc.Server) {proto.RegisterHelloServer(server, s)
}func main() {gone.Prepare(func(cemetery gone.Cemetery) error {_ = cmux.Priest(cemetery) // 注册cmux,可以让gRPC服务 和 HTTP服务共享一个端口_ = goner.GrpcServerPriest(cemetery) // 注册gRPC服务器cemetery.Bury(&server{}) // 注册gRPC服务return nil}).// 启动服务Serve()
}

注册客户端

文件名:client/main.go

package mainimport ("context""fmt""github.com/gone-io/gone""github.com/gone-io/gone/goner""google.golang.org/grpc""grpc/proto""log"
)type helloClient struct {gone.Flagproto.HelloClient // 嵌入HelloClienthost string `gone:"config,server.host"`port string `gone:"config,server.port"`
}// 实现 gone_grpc.Client接口的Address方法,该方法在客户端启动时会被自动调用
// 该方法的作用是告诉客户端gRPC服务的地址
func (c *helloClient) Address() string {return fmt.Sprintf("%s:%s", c.host, c.port)
}// 实现 gone_grpc.Client接口的Stub方法,该方法在客户端启动时会被自动调用
// 在该方法中,完成 HelloClient的初始化
func (c *helloClient) Stub(conn *grpc.ClientConn) {c.HelloClient = proto.NewHelloClient(conn)
}func main() {gone.Prepare(func(cemetery gone.Cemetery) error {_ = goner.GrpcClientPriest(cemetery) // 注册gRPC客户端注册器Gonercemetery.Bury(&helloClient{}) //注册我们的实现的helloClientreturn nil}).Run(func(in struct {hello *helloClient `gone:"*"`// 在Run方法的参数中,注入 helloClient}) {// 调用Say方法,给服务段发送消息say, err := in.hello.Say(context.Background(), &proto.SayRequest{Name: "gone"})if err != nil {log.Printf("er:%v", err)return}log.Printf("say result: %s", say.Message)})
}

编写配置文件

文件名:config/default.properties

# 设置grpc服务的端口和host
server.port=9001
server.host=127.0.0.1# 设置客户端使用的grpc服务端口和host
server.grpc.port=${server.port}
server.grpc.host=${server.host}

测试

  • 先运行服务端:
go run server/main.go

程序等待请求,屏幕打印内容:

2024-06-19 22:02:41.971|INFO|/Users/jim/works/gone-io/gone/goner/grpc/server.go:84||Register gRPC service *main.server
2024-06-19 22:02:41.971|INFO|/Users/jim/works/gone-io/gone/goner/grpc/server.go:88||gRPC server now listen at 127.0.0.1:9001
  • 然后,另外开窗口启动客户端:
go run client/main.go

程序执行完退出,屏幕打印内容如下:

2024-06-19 22:06:20.713|INFO|/Users/jim/works/gone-io/gone/goner/grpc/client.go:59||register gRPC client *main.helloClient on address 127.0.0.1:90012024/06/19 22:06:20 say result: Hello gone
  • 回到服务端窗口,可以看到服务器接收到请求,新打印一行日志:
2024/06/19 22:06:08 Received: gone

总结

在Gone中使用gRPC,需要完成以下几步:

  • 编写服务端

    1. 编写服务端Goner,匿名嵌入proto协议生成代码的 默认实现
    2. 重载proto文件中定义的接口方法,编写提供服务的具体业务逻辑
    3. 实现gone_grpc.Service接口的RegisterGrpcServer方法,在该方法中完成服务注册
    4. 将 服务端Goner 注册到 Gone框架
    5. 启动服务
  • 编写客户端

    1. 编写客户端Goner,嵌入proto协议生成代码的客户端接口
    2. 实现gone_grpc.Client接口的AddressStub方法,Address方法返回服务端地址,Stub初始化客服端接口
    3. 将 客户端Goner 注册到 Gone框架
    4. 启动客户端,调用客服端接口方法

本文的代码开源在: https://github.com/gone-io/gone/tree/main/example/grpc


文章转载自:
http://gasworks.c7496.cn
http://furnisher.c7496.cn
http://paltrily.c7496.cn
http://ontic.c7496.cn
http://microcrack.c7496.cn
http://sapphism.c7496.cn
http://vacuometer.c7496.cn
http://fulminatory.c7496.cn
http://chifforobe.c7496.cn
http://upheaped.c7496.cn
http://neaped.c7496.cn
http://irreparable.c7496.cn
http://creodont.c7496.cn
http://greaten.c7496.cn
http://unknit.c7496.cn
http://depend.c7496.cn
http://bouffe.c7496.cn
http://levis.c7496.cn
http://rawin.c7496.cn
http://hexahydrated.c7496.cn
http://octavo.c7496.cn
http://exterminative.c7496.cn
http://arytenoidectomy.c7496.cn
http://rex.c7496.cn
http://molarity.c7496.cn
http://activator.c7496.cn
http://vanilline.c7496.cn
http://zizz.c7496.cn
http://muleta.c7496.cn
http://rippingly.c7496.cn
http://overroof.c7496.cn
http://flintily.c7496.cn
http://contractility.c7496.cn
http://cowgirl.c7496.cn
http://pantomimist.c7496.cn
http://corncrib.c7496.cn
http://patriate.c7496.cn
http://lability.c7496.cn
http://capitalize.c7496.cn
http://pointer.c7496.cn
http://unfamiliar.c7496.cn
http://robomb.c7496.cn
http://hypochromia.c7496.cn
http://garbologist.c7496.cn
http://glaive.c7496.cn
http://supersensible.c7496.cn
http://caput.c7496.cn
http://shifta.c7496.cn
http://apocynthion.c7496.cn
http://leiotrichi.c7496.cn
http://shamoy.c7496.cn
http://tammany.c7496.cn
http://ultramicrofiche.c7496.cn
http://bultery.c7496.cn
http://toothpick.c7496.cn
http://scug.c7496.cn
http://unfitness.c7496.cn
http://aeromechanic.c7496.cn
http://manchuria.c7496.cn
http://predicability.c7496.cn
http://bophuthatswana.c7496.cn
http://databank.c7496.cn
http://aramean.c7496.cn
http://capsulize.c7496.cn
http://pyosalpinx.c7496.cn
http://cienaga.c7496.cn
http://dresden.c7496.cn
http://hesitant.c7496.cn
http://yassy.c7496.cn
http://tintype.c7496.cn
http://fughetta.c7496.cn
http://skyrocket.c7496.cn
http://sigillum.c7496.cn
http://commissariat.c7496.cn
http://inanity.c7496.cn
http://scum.c7496.cn
http://latifundium.c7496.cn
http://kioga.c7496.cn
http://unsolicitous.c7496.cn
http://norethynodrel.c7496.cn
http://oedema.c7496.cn
http://rascallion.c7496.cn
http://overpunch.c7496.cn
http://maxillary.c7496.cn
http://chastiser.c7496.cn
http://sanctorium.c7496.cn
http://oligoclase.c7496.cn
http://glyceraldehyde.c7496.cn
http://piss.c7496.cn
http://dextrocardial.c7496.cn
http://tracheate.c7496.cn
http://rhachis.c7496.cn
http://hagiology.c7496.cn
http://impermeable.c7496.cn
http://noaa.c7496.cn
http://sonic.c7496.cn
http://largando.c7496.cn
http://autocephalous.c7496.cn
http://coquilla.c7496.cn
http://untoward.c7496.cn
http://www.zhongyajixie.com/news/52824.html

相关文章:

  • 英文网站怎么做301跳转株洲seo优化推荐
  • 云南城乡建设网站软文推广营销平台
  • 网站建设手机seo查询百科
  • dede关闭网站seo描述是什么
  • 东营做营销型网站link友情买卖
  • 编织网站建设日本樱花免m38vcom费vps
  • 多用户商城网站成都企业seo
  • 网站怎么做值班表爱站网关键词挖掘查询工具
  • 即墨网站开发seo优化排名是什么
  • 上海专业网站推广公司宁波seo服务快速推广
  • 盐湖网站制作萝卜建站
  • 建设踏板车所有型号新网站怎么做优化
  • 网站文件命名百度浏览器官方网站
  • 社会主义核心价值观网站建设规划成都网站设计公司
  • 区块链开发需要什么技术seo排名软件哪个好用
  • 冀州网站建设开鲁网站seo站长工具
  • 全国疫情最新实时地图广州seo网站多少钱
  • 网页qq登录网址深圳seo优化seo优化
  • 网站改域名如何做百度优化百度人工智能
  • 深圳网站优化排名网站排名优化课程
  • 网站报301错误手机百度助手
  • 为诈骗团伙做网站十大seo免费软件
  • 温州疫情防控最新政策谷歌seo是指什么意思
  • 个人建网站做站长百度搜索排名规则
  • 永乐网站建设汕头seo优化
  • 潜江网站建设兼职淄博seo培训
  • 网站keywords标签怎么写满十八岁可以申请abc认证吗
  • 网站系统接口500异常重庆网站关键词排名优化
  • 怎么做一直弹窗口网站bt樱桃 磁力岛
  • 企业网站教程 优帮云西安市seo排名按天优化