网站建设优化服务行情网络服务器哪个最快

pingmian/2025/10/9 6:38:15/文章来源:
网站建设优化服务行情,网络服务器哪个最快,票据理财网站建设,北京网站制作闪快1、gateway集成swagger 1、为了简化实战过程#xff0c;gRPC-Gateway暴露的服务并未使用https#xff0c;而是http#xff0c;但是swagger-ui提供的调用服 务却是https的#xff0c;因此要在proto文件中指定swagger以http调用服务#xff0c;指定的时候会用到文件 prot…1、gateway集成swagger 1、为了简化实战过程gRPC-Gateway暴露的服务并未使用https而是http但是swagger-ui提供的调用服 务却是https的因此要在proto文件中指定swagger以http调用服务指定的时候会用到文件 protoc-gen-swagger/options/annotations.proto因此需要找到这个文件对应的包放在合适的位置。 2、swaggerdemo.swagger.json这是swagger-ui要用的json文件依据此文件swagger才能正确的展现 出gRPC-Gateway暴露的服务和参数定义可以在页面上发起请求此文件由插件protoc-gen-swagger生成。 3、在gRPC-Gateway的代码中集成swagger-ui的代码swagger-ui的代码由多个png、html、js文件组成 需要用工具go-bindata转换成go源码并放入合适的位置流程如下图 4、要将swaggerdemo.swagger.json文件通过web暴露出来需要工具go-bindata-assetfs。 5、使用swagger的方式打开swagger-ui页面后将swaggerdemo.swagger.json输入给swagger-ui页面 令其解析后生成对应的在线接口服务。 1.1 安装必要的go包 1、安装protoc-gen-swagger $ go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger $ go install github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger2、go-bindata用来将swagger-ui的源码转为GO代码 $ go install github.com/jteeuwen/go-bindata/...3、go-bindata-assetfs在应用启动后对外提供文件服务这样可以通过web访问swagger的json文件 $ go install github.com/elazarl/go-bindata-assetfs/...4、glog是常用的日志工具 $ go get -u github.com/golang/glog1.2 编写proto文件 新建swaggerdemo.proto // 协议类型 syntax proto3;// 包名 package swaggerdemo;option go_package./protoc;swaggerdemo;import google/api/annotations.proto; import protoc-gen-swagger/options/annotations.proto;// 定义swagger内容 option (grpc.gateway.protoc_gen_swagger.options.openapiv2_swagger) {info: {title: grpc gateway helloworld sample;version: 1.0;};schemes: HTTP; };// 定义的服务名 service Greeter {// 具体的远程服务方法rpc SayHello (HelloRequest) returns (HelloReply) {option (google.api.http) {post: /helloworldbody: *};} }// SayHello方法的入参只有一个字符串字段 message HelloRequest {string name 1; }// SayHello方法的返回值只有一个字符串字段 message HelloReply {string message 1; }protoc-gen-swagger/options/annotations.proto来自于 github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger 生成swaggerdemo.pb.gogRPC所需的go文件 $ protoc --go_outpluginsgrpc:. protoc/swaggerdemo.proto生成swaggerdemo.pb.gw.gogRPC-Gateway所需的go文件 $ protoc --grpc-gateway_outlogtostderrtrue:. protoc/swaggerdemo.proto生成swaggerdemo.swagger.jsonswagger-ui要用的json文件依据此文件swagger展现的页面中会有 gRPC-Gateway暴露的服务和参数定义可以在页面上发起请求 $ protoc --swagger_outlogtostderrtrue:. protoc/swaggerdemo.proto1.3 生成swagger-ui的go文件 从 https://github.com/swagger-api/swagger-ui下载包解压把dist目录下的所有文件拷贝我们项目的 /swagger/swagger-ui/目录下。 运行指令把Swagger UI转成datafile.go代码 $ go-bindata --nocompress -pkg swagger -o swagger/datafile.go swagger/swagger-ui/...1.4 编写gRPC的服务端代码 新建文件server.go内容如下 package mainimport (contextgoogle.golang.org/grpclognetpb swaggerproject/protoc )const (port :50051 )// 定义结构体在调用注册api的时候作为入参 // 该结构体会带上SayHello方法里面是业务代码 // 这样远程调用时就执行了业务代码了 type server struct {// pb.go中自动生成的是个空结构体pb.UnimplementedGreeterServer }// 业务代码在此写客户端远程调用SayHello时 // 会执行这里的代码 func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {// 打印请求参数log.Printf(Received: %v, in.GetName())// 实例化结构体HelloReply作为返回值return pb.HelloReply{Message: Hello in.GetName()}, nil }func main() {// 要监听的协议和端口lis, err : net.Listen(tcp, port)if err ! nil {log.Fatalf(failed to listen: %v, err)}// 实例化gRPC server结构体s : grpc.NewServer()// 服务注册pb.RegisterGreeterServer(s, server{})log.Println(开始监听等待远程调用...)if err : s.Serve(lis); err ! nil {log.Fatalf(failed to serve: %v, err)} }1.5 编写gRPC-Gateway服务端的代码 新建文件gateway.go内容如下 package mainimport (github.com/golang/gloggithub.com/grpc-ecosystem/grpc-gateway/runtimegolang.org/x/net/contextgoogle.golang.org/grpclognet/httppathstringsgw swaggerproject/protocswaggerproject/swaggerassetfs github.com/elazarl/go-bindata-assetfs )func run() error {ctx : context.Background()ctx, cancel : context.WithCancel(ctx)defer cancel()gwmux, err : newGateway(ctx)if err ! nil {panic(err)}mux : http.NewServeMux()mux.Handle(/, gwmux)mux.HandleFunc(/swagger/, serveSwaggerFile)serveSwaggerUI(mux)log.Println(grpc-gateway listen on localhost:9090)return http.ListenAndServe(:9090, mux) }func newGateway(ctx context.Context) (http.Handler, error) {opts : []grpc.DialOption{grpc.WithInsecure()}gwmux : runtime.NewServeMux()if err : gw.RegisterGreeterHandlerFromEndpoint(ctx, gwmux, :50051, opts); err ! nil {return nil, err}return gwmux, nil }func serveSwaggerFile(w http.ResponseWriter, r *http.Request) {log.Println(start serveSwaggerFile)if !strings.HasSuffix(r.URL.Path, swagger.json) {log.Printf(Not Found: %s, r.URL.Path)http.NotFound(w, r)return}p : strings.TrimPrefix(r.URL.Path, /swagger/)p path.Join(./protoc/, p)log.Printf(Serving swagger-file: %s, p)http.ServeFile(w, r, p) }func serveSwaggerUI(mux *http.ServeMux) {fileServer : http.FileServer(assetfs.AssetFS{Asset: swagger.Asset,AssetDir: swagger.AssetDir,Prefix: swagger/swagger-ui,})prefix : /swagger-ui/mux.Handle(prefix, http.StripPrefix(prefix, fileServer)) }func main() {defer glog.Flush()if err : run(); err ! nil {glog.Fatal(err)} }对于这个gateway.go文件有以下几处需要重点注意 1、外部的RESTful请求转发到server.go的功能被封装到newGateway方法中 2、请求URL中如果含有/swagger就交给serveSwaggerFile方法处理这里面的逻辑是将文件 swaggerdemo.swagger.json返回给请求方 3、重点关注serveSwaggerUI方法经过该方法的处理后如果请求URL中含有/swagger-ui就会交给前面 生成的datafile.go处理也就是打开了swagger-ui的页面 至此开发工作已经完成可以开始验证了。 1.6 测试 [rootzsx swagger_demo]# go run server.go 2023/02/12 19:00:16 开始监听等待远程调用...[rootzsx swagger_demo]# go run gateway.go 2023/02/12 19:00:28 grpc-gateway listen on localhost:9090访问 http://127.0.0.1:9090/swagger-ui/ 输入 http://127.0.0.1:9090/swagger/swaggerdemo.swagger.json 输入请求数据 发送请求 至此gateway集成swagger完成。 # 项目结构 $ tree swagger_demo/ swagger_demo/ ├── gateway.go ├── go.mod ├── google │ └── api │ ├── annotations.proto │ └── http.proto ├── go.sum ├── protoc │ ├── swaggerdemo.pb.go │ ├── swaggerdemo.pb.gw.go │ ├── swaggerdemo.proto │ └── swaggerdemo.swagger.json ├── protoc-gen-swagger │ └── options │ ├── annotations.proto │ └── openapiv2.proto ├── server.go └── swagger├── datafile.go└── swagger-ui├── favicon-16x16.png├── favicon-32x32.png├── index.css├── index.html├── oauth2-redirect.html├── swagger-initializer.js├── swagger-ui-bundle.js├── swagger-ui-bundle.js.map├── swagger-ui.css├── swagger-ui.css.map├── swagger-ui-es-bundle-core.js├── swagger-ui-es-bundle-core.js.map├── swagger-ui-es-bundle.js├── swagger-ui-es-bundle.js.map├── swagger-ui.js├── swagger-ui.js.map├── swagger-ui-standalone-preset.js└── swagger-ui-standalone-preset.js.map7 directories, 31 files

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/89051.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设培训四川17858833595做网站

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 K-means聚类算法实现 技术细节 选取的数据集是sklearn.datasets里面的鸢尾花数据集,方便最后的算法评价。 根据手肘法(即根据SSE代价函数)得出最合适的k值。 此处思路是先根据E …

在模板网站建站好吗厦门seo顾问

题目描述 给定一个 NM 的矩阵 A,请你统计有多少个子矩阵 (最小 1111, 最大 NM 满足子矩阵中所有数的和不超过给定的整数 K。 输入格式 第一行包含三个整数 N,M 和 K。 之后 N 行每行包含 M 个整数, 代表矩阵 A。 输出格式 一个整数代表答案。 输入输出样例 …

网站的前期推广深圳微信公众平台开发网站开发

最近在准备学校复试,刷一些老题旧题,在N诺oj和牛客网上都有提交。今天就总结部分题目,只写我觉得值得写的(当然还有一些我不会写,不想去学了)。 1、二进制数 输入输出格式 输入描述: 每行有一个数字n&#…

楚雄州城乡建设局网站乐陵森

澳大利亚政府,通过财政部,宣布正在努力引入一项监管框架,针对为澳大利亚居民和澳大利亚企业提供数字资产访问和持有服务的实体,将包括对所有数字资产中介的许可要求。 这些改革旨在解决已经确定的消费者风险,并支持数…

大连网站制作在线广西桂建云证件查询

更多资料获取 📚 个人网站:ipengtao.com 当处理迷宫问题时,遗传算法提供了一种创新的解决方案。本文将深入探讨如何运用Python和遗传算法来解决迷宫问题。迷宫问题是一个经典的寻路问题,寻找从起点到终点的最佳路径。遗传算法是一…

太原建站培训app后期维护与运营成本

图像混合 1 理论-线性混合操作 其中α的取值范围为0~1之间,表示图像的所占的权重 2 混合处理函数addWeighted() 3 代码示例 Mat src1, src2, dst;src1 imread("./1.png");src2 imread("./2.png");if (!src1.data && src2.empty()) //判断图片是…

网站建设微信公众号网站主机ip查询

shell之read命令 简介例子 简介 Linux的read命令用于从标准输入读取数据。它通常用于在shell脚本中读取用户的输入并将其分配给变量。 read命令的语法如下: read [-options] [variable]read命令的选项包括: -d:指定输入行的结束标志。 -p…

商务网站建设中的必备功能上海推广网站

本章重点 1. 为什么使用文件 2. 什么是文件 3. 文件的打开和关闭 4. 文件的顺序读写 5. 文件的随机读写 6. 文本文件和二进制文件 7. 文件读取结束的判定 8. 文件缓冲区 1. 为什么使用文件 我们在前面的文章介绍了通讯录的程序,当通讯录运行起来的时候&#xff0c…

山西省财政厅门户网站三基建设抖音营销推广怎么做

1、git三个区域:工作区,暂存区,版本库 2、git文件状态:未跟踪,已跟踪(新添加,未修改,已修改) 如何查看暂存区和工作区文件状态:git status -s 3、查看版本记…

做网站需求文档asp.net网站发布到虚拟主机

1.实验环境 主机A和主机B连接到交换机,并与一台路由器互连 2.需求描述 主机A和主机B连接到交换机,并与一台路由器互连主机A和主机B设置为同一网段,网关设置为路由接口地址查看ARP相关信息,熟悉在PC和Cisco设备上的常用命令 3.推…

阜阳h5网站建设公司如何评估一个网站

1.mysql语句执行的步骤 客户端请求->连接器(验证用户身份,给与权限)查询缓存(存在缓存则直接返回,不存在则执行后续操作)分析器(对sql进行词法分析和语法分析操作)优化器&#x…

用kid做教育网站域名营销型官方网站

9月12日,中国移动第四届科技周“量子计算算法与应用”分论坛在北京成功举办,中国移动研究院院长黄宇红发表致辞,中国移动未来研究院院长崔春风全程主持。玻色量子作为光量子计算领域真机测试与场景应用的标杆企业应邀出席,玻色量子…

杭州下城区建设局网站wordpress 加入搜索

Spark Sql默认并行度 看官网,默认并行度200 https://spark.apache.org/docs/2.4.5/sql-performance-tuning.html#other-configuration-options 优化 在数仓中 task最好是cpu的两倍或者3倍(最好是倍数,不要使基数) 拓展 在本地 task需要自己设置&a…

深圳自适应网站开发公司郑州做网站好

来源:网络大数据据IDC声称,到2018年,全球人工智能(AI)和认知系统支出将达到190亿美元,这比2017年的支出总额增加约54%。并购在不断发生。仅2017年就见证了几起大宗收购,比如雅虎被Verizon收购、苹果收购Shazam等。知名…

主流数据网站韩国情侣网站模板

本帖最后由 PlyFly 于 2015-2-13 22:11 编辑各位花粉注意了,本次发布的B056固件,华为终于修复了DTS源码输出到功放不能正常解码的问题(如功放无声音、破音等等)。经实际测试,不用Kodi就能轻松将DTS源码输出到功放解码,且无任何异常…

网站项目开发案深圳建设网站商

原文地址:http://www.learnopencv.com/facial-landmark-detection/#comment-2471797375 作为计算机视觉研究员,我们很早就开始研究人脸。人脸分析领域最广为人知的就是人脸识别(face recognition).但是为了识别一幅图像中的人脸&…

网站模板定做wordpress 更新文章

一个、总结 简单的说,Filter的作用就是拦截(Tomcat的)service(Request,Response)方法。拿到Request、Response对象进行处理。然后释放控制。继续自己主动流转。其运用的还是“分层”的思想。至于为什么要增加这一层,为…

网站建设网站定制开发国家食品查询网入口

日前,2023年全民终身学习活动周全国总开幕式在重庆举行,自2005年起,终身学习活动周已连续举办了18届,累计带动4亿多群众参与全民终身学习活动周,有效推进全面阅读。 随着全民阅读氛围的持续浓厚,阅读不再是语文学科的专项,不再是学校教育的专属,家庭、社会都在积极参与进来。尤…

企业免费网站建设模板下载十秒折一个萝卜刀

文章目录 一、RCE二、命令执行/注入-概述三、命令执行-常见函数四、PHP命令执行-常见函数1、exec:2、system3、passthru4、shell_exec5、反引号 backquote 五、PHP命令执行-常见函数总结六、命令执行漏洞成因七、命令执行漏洞利用条件八、命令执行漏洞分类1、代码层…

咨询邯郸网站建设网站备案ps

作为一种使用大量文本数据训练的深度学习模型,大模型可以生成自然语言文本或理解语言文本的含义,是通向人工智能的一条重要途径。大模型可以应用于各种机器学习任务,包括自然语言处理、计算机视觉、语音识别、机器翻译、推荐系统、强化学习等…