最新要闻
- 以前票房反超了会画海报恭喜对方:《满江红》却冷嘲热讽
- 全球今热点:碾压对手!OPPO Find X6工程机亮相:标准版都有潜望长焦
- 谷歌裁员细节曝光:开源主管被裁 61岁程序员在线求职
- 10分拉满!IGN发布《流浪地球2》影评:超越国际一流水准
- 奔驰车主扔钱加油大姐捡钱偷抹泪引热议 当事人回应:网友愤怒素质差到家
- 动态焦点:蹭热度有风险 电商老店使用流浪地球标识遭索赔15万
- 当前速讯:海外观众热评《流浪地球2》:中国科幻片惊艳 比全球票房第四《阿凡达2》好看
- 要买的抓紧了!宝马将于2月起涨价:最高2万元
- 世界观天下!21岁男子撞车后向27岁“叔叔”道歉 车主果断索赔
- 【报资讯】骁龙778G还能再战!荣耀50/60系列获MagicOS 7.0升级
- 每日消息!博主赞特斯拉研发支出巨大:比亚迪、奔驰、理想都比不过
- 5支39.9元超划算:高露洁牙膏多效护理实惠家庭装套大促
- 每日时讯!一加11同款!一加Ace 2外观首曝:环形镜头设计
- 全球资讯:春节假期后全国大部地区气温回升:南方最高可达20度 暖如春分
- 全球播报:生日蛋糕网店使用“流浪地球”标识 遭中影索赔15万
- 不是云南也不是海南!四川春节游客接待量全国第一
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【网关开发】7.Openresty使用cosocket API 发送http与tcp网络请求
(相关资料图)
目录- 背景
- 实现
- 遇到的问题
- API disabled in the context of init_worker_by_lua*
- HTTP/1.1 400 Bad Request
- 总结与思考
背景
为网关提供健康检查功能时需要对节点发送http或者tcp探活请求。Openresty 提供cosocket来处理非阻塞IO。
实现
跟工程结合在一起,这里简单拼接数据结构
local function __default_check_alive(status) return status >= 200 and status <= 299endlocal function debug_ctx() local ctx = { peer = {ip = "10.218.22.239", port = "8090"}, --目标机器 ahc = { type = "http", timeout = 3, check_http_send = "GET /ping HTTP/1.1\r\nHost: service_test.com\r\n\r\n", -- 发送的数据内容 }, status_check = __default_check_alive } return ctxend
发送http请求
local stream_sock = ngx.socket.tcp -- 引入模块local re_find = ngx.re.findlocal function __check_http_peer(ahc, peer, status_check) local ok local req = ahc.check_http_send local sock, err = stream_sock() -- 创建 TCP 的 cosocket 对象 if not sock then ngx.log(ngx.ERR, "failed to create stream socket: " .. err) return false, err end sock:settimeout(ahc.timeout * 1000) --设置超时时间 ok, err = sock:connect(peer.ip, peer.port) --建立连接 if not ok then return false end local bytes, err = sock:send(req) --发送数据 if not bytes then return false end local status_line, err = sock:receive() -- 接收数据 if not status_line then if err == "timeout" then sock:close() -- timeout errors do not close the socket. end return false end if status_check then local from, to, err = re_find(status_line, [[^HTTP/\d+\.\d+\s+(\d+)]], --利用正则获取status code "joi", nil, 1) if err then ngx.log(ngx.ERR, "failed to parse status line: "..err) end if not from then sock:close() return false end local status = tonumber(status_line:sub(from, to)) if not status_check(status) then -- ngx.log(ngx.ERR, status_line) sock:close() return false end end sock:close() return trueend
发送tcp请求
-- functional, check peer by tcp, returns bool indicate up or downlocal function __check_tcp_peer(ahc, peer) local ok local sock, err = stream_sock() if not sock then ngx.log(ngx.ERR, "failed to create stream socket: " .. err) return false, err end sock:settimeout(ahc.timeout * 1000) ok, err = sock:connect(peer.ip, peer.port) if not ok then return false end sock:close() return trueend
遇到的问题
API disabled in the context of init_worker_by_lua*
这是因为我使用的地方是在init_worker_by_lua阶段,这阶段是不允许使用cosocket的,除了这些阶段还有set_by_lua、log_by_lua、header_filter_by_lua、body_filter_by_lua、init_by_lua* 都是不允许使用的
-- 修改调用ngx.timer.at(0, function (p, self) local ctx = down_peer_checker.debug_ctx() ngx.log(ngx.INFO,"down_peer_checker check_peer "..tostring(down_peer_checker.check_peer(ctx))) end)
HTTP/1.1 400 Bad Request
主要是请求字符串格式问题、
GET /ping HTTP/1.1\r\n Host: service_test.com\r\n 错误GET /ping HTTP/1.1\r\nHost: service_test.com\r\n\r\n 正确
总结与思考
cosocket知识与参考文章:https://zhuanlan.zhihu.com/p/507329735存在部分封装,源码地址 https://github.com/zhaoshoucheng/openresty/blob/main/pkg/lua_script/upstream/down_peer_checker.lua
-
【网关开发】7.Openresty使用cosocket API 发送http与tcp网络请求
背景为网关提供健康检查功能时需要对节点发送http或者tcp探活请求。Openresty提供cosocket来处理非阻塞I...
来源: 【网关开发】7.Openresty使用cosocket API 发送http与tcp网络请求
美语发音【总结】
以前票房反超了会画海报恭喜对方:《满江红》却冷嘲热讽
全球今热点:碾压对手!OPPO Find X6工程机亮相:标准版都有潜望长焦
谷歌裁员细节曝光:开源主管被裁 61岁程序员在线求职
10分拉满!IGN发布《流浪地球2》影评:超越国际一流水准
环球新动态:全网音乐免费下载,音乐下载工具,音乐免费下载mp3格式,音乐下载器,小说下载,小说阅读,磁力链接聚合搜索,每日美女壁纸,如何免费下载想听的音乐或小说
天天日报丨【算法训练营day29】LeetCode491. 递增子序列 LeetCode46. 全排列 LeetCode47. 全排列II
关于前端低代码的一些看法
奔驰车主扔钱加油大姐捡钱偷抹泪引热议 当事人回应:网友愤怒素质差到家
动态焦点:蹭热度有风险 电商老店使用流浪地球标识遭索赔15万
当前速讯:海外观众热评《流浪地球2》:中国科幻片惊艳 比全球票房第四《阿凡达2》好看
要买的抓紧了!宝马将于2月起涨价:最高2万元
世界观天下!21岁男子撞车后向27岁“叔叔”道歉 车主果断索赔
【报资讯】骁龙778G还能再战!荣耀50/60系列获MagicOS 7.0升级
每日消息!博主赞特斯拉研发支出巨大:比亚迪、奔驰、理想都比不过
5支39.9元超划算:高露洁牙膏多效护理实惠家庭装套大促
Python工具箱系列(二十三)
天天观速讯丨JavaScript 条件判断与比较运算
环球热推荐:Python 的垃圾回收机制【译】
世界观焦点:Java 如何高亮 Excel 中低于或高于平均值的单元格
每日时讯!一加11同款!一加Ace 2外观首曝:环形镜头设计
全球资讯:春节假期后全国大部地区气温回升:南方最高可达20度 暖如春分
全球播报:生日蛋糕网店使用“流浪地球”标识 遭中影索赔15万
不是云南也不是海南!四川春节游客接待量全国第一
全球观焦点:吉利真会玩儿:汽车挡风玻璃上实现烟花秀
sacai是什么牌子?sacai有中国官网吗?
孑孓的读音是什么?孑孓是什么意思?
手机水货是什么意思?手机水货和行货有什么区别?
木棉花的春天大结局是什么?木棉花的春天全部演员表
绿芜是谁演的?绿芜为什么投河自尽?
电脑出现报警声是怎么回事?电脑出现报警声怎么解决?
松下电饭煲质量怎么样?松下电饭煲怎么调时间?
【环球聚看点】指向立体星(随便起的名)的建立与使用
小米2a手机是什么系统?小米2A手机充电保护怎么打开?
诺基亚210什么时候上市的?诺基亚210手机参数
戴尔的台式机怎么进入bios?戴尔台式机开不了机怎么办?
跑2500公里高速 踩着最后几秒过收费站:女子直呼惊险刺激
今日最新!流浪地球2原来是在青岛流浪 流亭机场戏份最多
全球观察:1:1真机开模!绿联iPhone钢化膜新年大促:2片到手5.22元起
外卖小哥过年3天赚2695元:年三十到初二上班不回家
环球关注:新一代宝马X1或将3月上市:尺寸再加长、堪比大哥X3
flash8.ocx或其附件之一不能正确注册
【全球速看料】Linux下docker安装部署
当前通讯!芬兰一动物园拟送大熊猫回中国:缺钱养不了
环球今头条!微软逼你升级Win11?Windows 10 ISO等正常下载
门店329元 361° 云翎运动鞋89元到手:2.7折
当前最新:中国科学家打造“类真人皮肤”:受伤1小时完全愈合
全球通讯!特斯拉强推“单踏板”遭吐槽 博主直言:价值观、是非观畸形
环球热门:读Java8函数式编程笔记04_类库
精彩看点:PHP反序列化新手入门学习总结
k8s~fluentd从kafka到elk
天天日报丨《满江红》官方连续发文回应争议扩散:统编教材删除岳飞满江红?从未选编
【天天新要闻】国内还有人看吗?漫威超英大片《黑豹2》被偷跑:1080p高清版流出
【世界快播报】卖价6.5亿 全球订单超1035架:国产大飞机C919有望3月载客飞行
今热点:评分不断下跌 电影《满江红》起诉4位微博大V 复旦教授回应
票房超24亿 中国科幻片里程碑!郭帆回应《流浪地球3》:放心了 喜欢接着拍
世界信息:博客主题 Lite
《满江红》票房超29亿!游客排长队打秦桧雕像:大妈亮出鞋底猛抽
无人机革命!麻省理工学院开发出超低噪音螺旋桨
【全球时快讯】node借助jsonwebtoken生成token以及验证token是否过期
真着急!中国显卡厂商首次曝光RTX 4060、RTX 4050
当前动态:有航司开33万高薪急招空乘:送八险二金、1.5年单身公寓
天天新资讯:《熊出没》系列电影累计票房超50亿!观众看《深海》突遇屋顶漏水
当前资讯!MySQL笔记01: MySQL入门_1.3 MySQL启动停止与登录
环球即时:手把手教你搭建mongodb分片集群
女子投简历被告知不招豫籍 直呼地域歧视很不公平:网友力挺河南人
全球看点:神了!锐龙9 7900X反而比锐龙9 7900便宜 还送32GB内存
环球新动态:【算法训练营day28】LeetCode93. 复原IP地址 LeetCode78. 子集 LeetCode90. 子集II
环球新动态:C# 闭包类对弱引用的坑
天天新资讯:DC-9
世界实时:颜值就是正义!联力积木风扇SLV2上架京东:259元一只
天天微资讯!Collection常用方法【汇总】
满分100!老外给《流浪地球2》打分30 情节复杂:网友称文化输出成功
高铁超员报警无法行驶 无票乘客下车:网友直呼头回见 12306回应合规
离谱!男子竟在高速上与公鸡打架!网友:“被年货打了”
天天实时:谷歌裁员1.2万人当天 幸存员工崩溃哭泣:有员工直呼跟永不作恶告别
世界快看:推荐这5个很牛的开源项目,程序员直呼内行
天天视点!IM通讯协议专题学习(八):金蝶随手记团队的Protobuf应用实践(原理篇)
世界热门:VS Code保存后自动格式化Vue代码
世界讯息:日系车再受质疑 因发动机缺陷:日产召回超52万辆汽车
世界速看:(笔记)运算放大器经典应用电路及工作原理
【网关开发】6.lua绑定委托(delegate)实现多播调用
【环球新视野】3女生拎3斤米酒进站被拦一饮而尽!网友:王宝强听了都头疼
天天短讯!比亚迪海豚上演高速路“全自动驾驶” 车主躺后排睡觉
每日视点!击败《流浪地球2》!《满江红》成票房冠军:张艺谋大儿子出演 游客排长队打秦桧雕像免票逛岳飞庙
自建“出海舰队” 比亚迪花了50亿元买的船:长这模样
日本原装进口!雀巢黑咖啡大促:6毛8能泡一杯
当前通讯!看个小说竟然像在照镜子!
数据库容灾等级
后端跨域问题导致java.io.IOException: UT010029: Stream is closed解决办法
当前焦点!夏普发布新款PV800UL激光投影仪:亮度高达8000ANSI流明
观点:还买啥车!美国人车贷都还不起了 拖欠率比金融危机峰值还高
中国反击!新增7项先进科技禁止/限制出口 合计达139项
MySQL索引底层探究
热头条丨感受 Vue3 的魔法力量
每日短讯:真刺鸡战场!西安一景区设免费抓鸡活动:人鸡比例10:1
AMD YES!来自小厂的迷你主机 把友商按在地上摩擦
世界看点:你敢坐吗?日产汽车联手日立:通过电动汽车为电梯临时供电
湖南以前叫什么名字?湖南旅游十大必去景区