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

旅游网站建设属于什么以及学科wordpress oday

旅游网站建设属于什么以及学科,wordpress oday,小程序 深圳公司,关于电商网站建设与管理的书籍Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战#xff0c;研究一下。之前没搞过go#xff0c;踩了很多坑#xff0c;最主要的就是tinygo打包#xff0c;多方寻求解决无果#xff0c;结论是tinygo0.32go1.19无法在macos arm架构下打包。…Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战研究一下。之前没搞过go踩了很多坑最主要的就是tinygo打包多方寻求解决无果结论是tinygo0.32go1.19无法在macos arm架构下打包。升级go1.21再次打包提示unsafe.SliceData requires go1.20 or later。后放弃macosarm采用ubuntuamd64打包ubuntu打包也必须使用tinygo0.28.1。0.32.0在ubuntu仍然提示unsupported GOOS/GOARCH pair wasip1/wasm 环境布置 包安装等可能需要依赖魔法,实在不行再配置代理仓库吧下载GoLand使用GoLand拷贝代码https://github.com/alibaba/higress定位到higress/plugins/wasm-go/extensions目录安装Golang1.19推荐直接在IDE中安装 访问这个地方https://go.dev/dl/找安装包macos下载好的安装文件直接安装默认会安装到/usr/local/go目录 TinyGo要求 0.28.1 版本以上安装 官方指引链接https://tinygo.org/getting-started/install/macos直接brew install brew tap tinygo-org/toolsbrew install tinygo报错You are using macOS 15…(刚升级15系统 下载安装https://tinygo.org/getting-started/install/macos/ tar xvzf tinygo0.32.0.darwin-amd64.tar.gz添加环境变量 vim ~/.bash_profile添加一行export PATHextract location/tinygo/bin:$PATHsource ~/.bash_profile 官方Demo 用GoLand打开higress找到/plugins/wasm-go/extensions/hello-world使用master分支当前24年6月25日19点,我使用的Revision版本ef4a0243aceb59ad0e630c40683c429a4f1198a0参考https://higress.io/zh-cn/docs/user/wasm-go/#2-编写-maingo-文件把hello-world改造下顺便学习下语法 package mainimport (github.com/alibaba/higress/plugins/wasm-go/pkg/wrappergithub.com/higress-group/proxy-wasm-go-sdk/proxywasmgithub.com/higress-group/proxy-wasm-go-sdk/proxywasm/typesgithub.com/tidwall/gjson )func main() {wrapper.SetCtx(// 插件名称hello-world,// 为解析插件配置设置自定义函数wrapper.ParseConfigBy(parseConfig),// 为处理请求头设置自定义函数wrapper.ProcessRequestHeadersBy(onHttpRequestHeaders),) }// MyConfig /* type MyConfig struct {mockEnable bool }/* 在控制台插件配置中填写的yaml配置会自动转换为json此处直接从json这个参数里解析配置即可 note- 星号表示指针- 传递一个指针给函数时函数可以直接修改指针所指向的变量的值 */ func parseConfig(json gjson.Result, config *MyConfig, log wrapper.Log) error {// 解析出配置更新到config中config.mockEnable json.Get(mockEnable).Bool()log.Info(yml配置此时为: json.Raw)return nil }/* HTTP 请求头处理阶段网关接收到客户端发送来的请求头数据时触发wrapper.ProcessRequestHeadersBy note- 没有星号表示副本对副本的任意修改都不会影响到原来的变脸 */ func onHttpRequestHeaders(ctx wrapper.HttpContext, config MyConfig, log wrapper.Log) types.Action {log.Info(开始拦截header)//proxywasm工具类直接增加headererr : proxywasm.AddHttpRequestHeader(hello, world)if err ! nil {return 0}//如果配置为的true,直接返回hello-worldif config.mockEnable {//proxywasm工具类直接拦截返回responseerr : proxywasm.SendHttpResponse(200, nil, []byte(hello world), -1)if err ! nil {return 0}}return types.ActionContinue } 在GoLand中直接在方法中使用json gjson会自动在go.mod和main.go的require中增加相关的依赖 higress插件可以实现的4个钩子 HTTP 请求头处理阶段wrapper.ProcessRequestHeadersByHTTP 请求 Body 处理阶段wrapper.ProcessRequestBodyByHTTP 应答头处理阶段wrapper.ProcessResponseHeadersByHTTP 应答 Body 处理阶段wrapper.ProcessResponseBodyBy proxywasm工具类可以实现的方法如下 分类方法名称用途可以生效的HTTP 处理阶段请求头处理GetHttpRequestHeaders获取客户端请求的全部请求头HTTP 请求头处理阶段ReplaceHttpRequestHeaders替换客户端请求的全部请求头HTTP 请求头处理阶段GetHttpRequestHeader获取客户端请求的指定请求头HTTP 请求头处理阶段RemoveHttpRequestHeader移除客户端请求的指定请求头HTTP 请求头处理阶段ReplaceHttpRequestHeader替换客户端请求的指定请求头HTTP 请求头处理阶段AddHttpRequestHeader新增一个客户端请求头HTTP 请求头处理阶段请求 Body 处理GetHttpRequestBody获取客户端请求 BodyHTTP 请求 Body 处理阶段AppendHttpRequestBody将指定的字节串附加到客户端请求 Body 末尾HTTP 请求 Body 处理阶段PrependHttpRequestBody将指定的字节串附加到客户端请求 Body 的开头HTTP 请求 Body 处理阶段ReplaceHttpRequestBody替换客户端请求 BodyHTTP 请求 Body 处理阶段应答头处理GetHttpResponseHeaders获取后端响应的全部应答头HTTP 应答头处理阶段ReplaceHttpResponseHeaders替换后端响应的全部应答头HTTP 应答头处理阶段GetHttpResponseHeader获取后端响应的指定应答头HTTP 应答头处理阶段RemoveHttpResponseHeader移除后端响应的指定应答头HTTP 应答头处理阶段ReplaceHttpResponseHeader替换后端响应的指定应答头HTTP 应答头处理阶段AddHttpResponseHeader新增一个后端响应头HTTP 应答头处理阶段应答 Body 处理GetHttpResponseBody获取客户端请求 BodyHTTP 应答 Body 处理阶段AppendHttpResponseBody将指定的字节串附加到后端响应 Body 末尾HTTP 应答 Body 处理阶段PrependHttpResponseBody将指定的字节串附加到后端响应 Body 的开头HTTP 应答 Body 处理阶段ReplaceHttpResponseBody替换后端响应 BodyHTTP 应答 Body 处理阶段HTTP 调用DispatchHttpCall发送一个 HTTP 请求-GetHttpCallResponseHeaders获取 DispatchHttpCall 请求响应的应答头-GetHttpCallResponseBody获取 DispatchHttpCall 请求响应的应答 Body-GetHttpCallResponseTrailers获取 DispatchHttpCall 请求响应的应答 Trailer-直接响应SendHttpResponse直接返回一个特定的 HTTP 应答-流程恢复ResumeHttpRequest恢复先前被暂停的请求处理流程-ResumeHttpResponse恢复先前被暂停的应答处理流程- 编译生成WASM文件 #整理下代码依赖啥的 go mod tidy #进入插件目录 cd /higress/plugins/wasm-go/extensions/hello-world#macos打包 /Users/y/GolandProjects/higress/plugins/wasm-go/extensions/hello-world tinygo build -o main.wasm -schedulernone -targetwasi -gccustom -tagscustommalloc nottinygc_finalizer ./ #提示异常 go: unsupported GOOS/GOARCH pair wasip1/wasm #升级到go version go1.21.10 darwin/arm64 #打包提示/Users/y/go/go1.21.10/src/strings/builder.go:49:23: unsafe.SliceData requires go1.20 or later #todo 多方寻求解决无果结论是无法在macos arm架构下打包 #todo tinygo只有31版本后才支持darwin但是插件打包必须是28.1的tinygo#找了ubuntu打包 #必须是这个tinygo版本31版本任然提示go1.21.10 wget https://github.com/tinygo-org/tinygo/releases/download/v0.28.1/tinygo_0.28.1_amd64.deb sudo dpkg -i tinygo_0.28.1_amd64.deb wget https://go.dev/dl/go1.19.linux-amd64.tar.gz tar -xzf go1.19.linux-amd64.tar.gz #找个profile放入下面环境变量source一下 export PATH/home/go/bin:$PATH#unbuntu初始化工程 mkdir /home/go_project_4_compile cd /home/go_project_4_compile go mod init wasm-demo-go #代码复制上去 #整理依赖 go mod tidy #再打包 tinygo build -o main.wasm -schedulernone -targetwasi -gccustom -tagscustommalloc nottinygc_finalizer ./ #输出main.wasm下载到本地本地调试 #创建目录 mkdir ~/higress-plugin-hello vim docker-compose.yaml vim envoy.yaml docker compose updocker-compose.yaml version: 3.7 services:envoy:image: higress-registry.cn-hangzhou.cr.aliyuncs.com/higress/gateway:v1.4.0-rc.1entrypoint: /usr/local/bin/envoy# 注意这里对wasm开启了debug级别日志正式部署时则默认info级别command: -c /etc/envoy/envoy.yaml --component-log-level wasm:debugdepends_on:- httpbinnetworks:- wasmtestports:- 10000:10000volumes:- ./envoy.yaml:/etc/envoy/envoy.yaml- ./main.wasm:/etc/envoy/main.wasmhttpbin:image: kennethreitz/httpbin:latestnetworks:- wasmtestports:- 12345:80networks:wasmtest: {}admin:address:socket_address:protocol: TCPaddress: 0.0.0.0port_value: 9901 static_resources:listeners:- name: listener_0address:socket_address:protocol: TCPaddress: 0.0.0.0port_value: 10000filter_chains:- filters:- name: envoy.filters.network.http_connection_managertyped_config:type: type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManagerscheme_header_transformation:scheme_to_overwrite: httpsstat_prefix: ingress_httproute_config:name: local_routevirtual_hosts:- name: local_servicedomains: [*]routes:- match:prefix: /route:cluster: httpbinhttp_filters:- name: wasmdemotyped_config:type: type.googleapis.com/udpa.type.v1.TypedStructtype_url: type.googleapis.com/envoy.extensions.filters.http.wasm.v3.Wasmvalue:config:name: wasmdemovm_config:runtime: envoy.wasm.runtime.v8code:local:filename: /etc/envoy/main.wasmconfiguration:type: type.googleapis.com/google.protobuf.StringValuevalue: |{mockEnable: false}- name: envoy.filters.http.routerclusters:- name: httpbinconnect_timeout: 30stype: LOGICAL_DNS# Comment out the following line to test on v6 networksdns_lookup_family: V4_ONLYlb_policy: ROUND_ROBINload_assignment:cluster_name: httpbinendpoints:- lb_endpoints:- endpoint:address:socket_address:address: httpbinport_value: 80验证 #10000为网关端口#发送请求 curl -X GET -d {args:{},headers:{Accept:*/*,Hello:world,Host:127.0.0.1:10000,Original-Host:127.0.0.1:10000,Req-Start-Time:1681269273896,User-Agent:curl/7.79.1,X-Envoy-Expected-Rq-Timeout-Ms:15000},origin:172.18.0.3,url:https://127.0.0.1:10000/get} http://127.0.0.1:10000/get 返回 {args: {},headers: {Accept: */*,Content-Length: 272,Content-Type: application/x-www-form-urlencoded,Hello: world,Host: 127.0.0.1:10000,Original-Host: 127.0.0.1:10000,Req-Start-Time: 1719377044522,User-Agent: curl/8.7.1,X-Envoy-Expected-Rq-Timeout-Ms: 15000},origin: 172.22.0.3,url: https://127.0.0.1:10000/get }#修改本地的envoy.yaml #将mockEnable配置修改为true#重启下higress容器 curl -X GET -d {args:{},headers:{Accept:*/*,Hello:world,Host:127.0.0.1:10000,Original-Host:127.0.0.1:10000,Req-Start-Time:1681269273896,User-Agent:curl/7.79.1,X-Envoy-Expected-Rq-Timeout-Ms:15000},origin:172.18.0.3,url:https://127.0.0.1:10000/get} http://127.0.0.1:10000/get返回的 hello world#日志也没问题 [2024-06-26 04:49:29.857][29][info][wasm] [external/envoy/source/extensions/common/wasm/context.cc:1311] wasm log wasmdemo: [hello-world] 开始拦截header [2024-06-26 04:49:18.080][29][info][wasm] [external/envoy/source/extensions/common/wasm/context.cc:1311] wasm log: [hello-world] yml配置此时为:{mockEnable: true}总结 tinygo0.32go1.19无法在macos arm架构下打包。升级go1.21再次打包提示unsafe.SliceData requires go1.20 or later。后放弃macosarm采用ubuntuamd64打包ubuntu打包也必须使用tinygo0.28.1。0.32.0在ubuntu仍然提示unsupported GOOS/GOARCH pair wasip1/wasm 写到最后
http://www.w-s-a.com/news/249627/

相关文章:

  • 聊城九洲建设有限公司网站师大暨大网站建设
  • 烟台网站建设学校潍坊市建设监理协会网站
  • 大良营销网站建设资讯建设厅网站总经济师是干什么的
  • 网站优化推广软件网站制作公司dedecms
  • 在哪一个网站做社保申报百度小程序开发平台
  • 东莞网站建设_东莞网页设计网站色调代号
  • 濮阳住房和城乡建设部网站给别人做ppt的网站
  • 电子商务网站建设规划心得广告投放媒体
  • 淘宝店铺购买价格宝应百度seo
  • 同一虚拟主机 2个网站如果网站设计时
  • 网站维护的协议做网站 需要 域名 空间
  • 高安建站公司济宁哪里做网站最便宜
  • 南宁建站免费模板简单的html网页设计
  • 吉林省建设 安全 网站沐风seo
  • 自己做捕鱼网站能不能挣钱软件开发公司需要什么硬件设备
  • 大连设计网站公司3小说网站开发
  • 建设环保网站查询系统网站建设168
  • 保险网站程序源码wordpress过滤敏感
  • 简述营销型网站推广的方法网站建设报价方案模板
  • 四川林峰脉建设工程有限公司网站为什么建设营销型网站
  • 网站模板搭建已经建网站做外贸
  • 网站建设选哪个wordpress实现微信登录界面
  • 网页设计网站哪个公司好学网站开发要多少钱
  • 商务网站建设ppt做视频分享网站
  • WordPress网站根目录有哪些wordpress用户等级
  • 私人装修接单网站重庆制作企业网站
  • 易企秀网站怎么做轮播图什么是网站版面布局
  • 网站开发先写什么后写什么做网站公司专业
  • 中山网站建设文化外贸公司的网站建设模板
  • 美食网站开发开题报告wordpress第三方支付接口