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

网站开发可选择的方案有swf格式网站链接怎样做

网站开发可选择的方案有,swf格式网站链接怎样做,网站排名突然下降解决,怎么做网站的主页面yaml定义http规则#xff0c;和自定义实现网关路由 proto定义http规则总归是麻烦的#xff0c;因为proto文件还是定义消息#xff0c;grpc接口好一些。配置http规则有更好的方式。我们可以使用yaml文件定义接口的http规则。 同时有些接口不是只是让网关转发这么简单 有时需…yaml定义http规则和自定义实现网关路由 proto定义http规则总归是麻烦的因为proto文件还是定义消息grpc接口好一些。配置http规则有更好的方式。我们可以使用yaml文件定义接口的http规则。 同时有些接口不是只是让网关转发这么简单 有时需要自己定网关接口handler yaml定义http规则 type: google.api.Service config_version: 3http:rules:# {package}.{message}.{method}- selector: user.User.Getget: /user/{id}- selector: user.User.AddOrUpdatepost: /userbody: *additional_bindings:- put: /userbody: *- patch: /userbody: addr- selector: user.User.Deletedelete: /user/{id} proto文件 syntax proto3; package user; option go_package user/proto;message Member{int64 id 1;string userName 2[json_name user_name];int32 age 3;string phone 4;Addr addr 5; } message Addr {string province 1;string city 2;string county 3; }message UploadRequest {int64 size 1;bytes content 2; } message UploadResponse {string filePath 1[json_name file_path]; } service User{rpc Get(Member) returns (Member) {}rpc AddOrUpdate(Member) returns (Member) { }rpc Delete(Member) returns (Member) {}rpc Upload(stream UploadRequest) returns (UploadResponse){} } 生成消息,grpc,网关 # 生成message protoc --proto_pathproto --go_outproto --go_optpathssource_relative proto/user.proto # 生成grpc service protoc --proto_pathproto --go-grpc_outproto --go-grpc_optpathssource_relative proto/user.proto #生成gateway protoc --proto_pathproto --grpc-gateway_outproto --grpc-gateway_opt logtostderrtrue --grpc-gateway_opt pathssource_relative --grpc-gateway_opt grpc_api_configurationproto/user.yaml proto/user.proto参考grpc-gateway入门中的启动代码就能调用对应接口啦 自定义实现网关路由 在生成gateway后前面proto文件中我们预留了一个文件上传grpc接口。然后在yaml中我们是没有定义对应http规则。 所以需要自定义实现对应的网关路由来应对复杂的业务情况。 gateway.go 通过mux.HandlePath添加自定义处理的路由和对应handler函数 package gatewayimport (contextflaggoogle.golang.org/grpc/health/grpc_health_v1net/httpuser/user-server/gateway/middlewaregithub.com/grpc-ecosystem/grpc-gateway/v2/runtimegoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecuregw user/proto )var (grpcServerEndpoint flag.String(grpc-server-endpoint, localhost:50051, gRPC server endpoint) )func Run() error {ctx : context.Background()ctx, cancel : context.WithCancel(ctx)defer cancel()inComingOpt : runtime.WithIncomingHeaderMatcher(func(s string) (string, bool) {switch s {case Service-Authorization:return service-authorization, truedefault:return , false}return , false})//创建连接,用于健康检查conn, err : grpc.Dial(*grpcServerEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {return err}mux : runtime.NewServeMux(inComingOpt, runtime.WithHealthzEndpoint(grpc_health_v1.NewHealthClient(conn)))//添加自定义处理函数mux.HandlePath(POST, /upload, uploadHandler)handler : middleware.Cors(mux)opts : []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())}err gw.RegisterUserHandlerFromEndpoint(ctx, mux, *grpcServerEndpoint, opts)if err ! nil {return err}return http.ListenAndServe(:8081, handler) } upload.go 写对应网关需要注册的handler package gatewayimport (contextfmtgithub.com/golang/protobuf/jsonpbgoogle.golang.org/grpcgoogle.golang.org/grpc/credentials/insecuregoogle.golang.org/grpc/metadataionet/httpuser/proto )func uploadHandler(w http.ResponseWriter, r *http.Request, pathParams map[string]string) {serviceAuthorization : r.Header.Get(Service-Authorization)fmt.Println(serviceAuthorization)err : r.ParseForm()if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}f, header, err : r.FormFile(attachment)if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}defer f.Close()conn, err : grpc.Dial(*grpcServerEndpoint, grpc.WithTransportCredentials(insecure.NewCredentials()))if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}defer conn.Close()c : proto.NewUserClient(conn)ctx : context.Background()ctx metadata.NewOutgoingContext(ctx, metadata.New(map[string]string{file_name: header.Filename, service-authorization: serviceAuthorization}))stream, err : c.Upload(ctx)if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}buf : make([]byte, 100)for {n, err : f.Read(buf)if err ! nil err ! io.EOF {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}if n 0 {break}stream.Send(proto.UploadRequest{Content: buf[:n],Size: int64(n),})}res, err : stream.CloseAndRecv()if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}m : jsonpb.Marshaler{}str, err : m.MarshalToString(res)if err ! nil {http.Error(w, fmt.Sprintf(上传失败%s, err.Error()), http.StatusInternalServerError)return}w.Header().Add(Content-Type, application/json)fmt.Fprint(w, str) } 重新启动即可
http://www.hkea.cn/news/14447602/

相关文章:

  • wordpress超时退出企业网站如何做优化
  • 婚纱摄影网站大全旅游网站的功能
  • 做图片网站赚不赚钱建站需求
  • 可以做mv的视频网站长春市网络品牌推广
  • 网站页面好了怎么做后端wordpress 安装旧版本
  • 网站seo的推广计划网络营销有什么新的变化
  • 兄弟们给个能用的网站群晖wordpress外网
  • 企业cms建站系统焦作网站建设哪家好
  • 聊城手机网站建设解决方案施工企业年终总结及明年工作计划
  • 美剧网站怎么做免费活动网
  • 省技能大赛网站开发方案高端品牌网页设计
  • 网站建设前端切图贵阳市住房和城乡建设厅网站
  • 动易网站栏目局网站建设意见
  • ps做网站要求官网网站建设研究
  • 网站后台密码忘了怎么办企业营销的意义
  • 运城购物网站开发设计做网站建设挣钱吗
  • 网站dns解析失败音乐播放网站开发pc端
  • 网站 后台 设计wordpress回复显示插件
  • 怀化物流网站建设报价wordpress评论选择头像
  • 沈阳大型网站设计公司WordPress纯代码添加雪花
  • 网站专业优化公司交易类网站建设费用
  • 长城建设投资有限公司网站建设摩托车官网中国官网报价大全
  • 网页设计网站开发需要什么软件广西桂林最新事件
  • 企业网站建设费用 珠海浙江网站建设品牌
  • 网站开发实战视频教程厚街做网站公司
  • 北京公司网站制作哪家专业安徽省建设安全质量协会网站
  • 株洲网站优化找哪家网络服务有点问题
  • 国外网站能否做百科参考资料网页网站作业制作
  • 狠狠做网站歌手投票网站怎么做
  • 新乡营销型网站建设长春seo经理