位置: 编程技术 - 正文

浅谈Node Inspector 代理实现(浅谈幼儿良好行为的培养论文)

编辑:rootadmin

推荐整理分享浅谈Node Inspector 代理实现(浅谈幼儿良好行为的培养论文),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:浅谈一下新冠的好处,浅谈特殊儿童的融合教育论文,浅谈如何培养孩子的注意力,浅谈双减背景下的高效课堂,浅谈建筑地基基础加固施工技术亲,浅谈特殊儿童的融合教育论文,浅谈建筑地基基础加固施工技术亲,浅谈如何培养孩子的注意力,内容如对您有帮助,希望把文章链接给更多的朋友!

背景

平时做 node 开发的时候,通过 node inspector 来进行断点调试是一个很常用的 debug 方式。但是有几个问题会导致我们的调试效率降低。

问题一:当使用 vscode 进行断点调试时,如果应用是通过 cluster 启动的 inspector,那么每次当 worker 挂了重启后,inspector 的端口都会自增。虽然在 node8.x 版本中可以指定 inspectPort 固定调试端口,但是在 node6.x 中是不支持的。这样会导致每次 worker 重启了就得在 vscode 中重新指定调试端口。

问题二:当使用 devtools 调试的时候,每次调试都需要拷贝 devtools 链接到 chrome 上调试,而上面说的端口变更问题则会导致 devtools 的链接变更,除此之外,每次重新启动 inspector 也会导致 devtools 的链接变更,因为 websocket id 变了。

而把上面的两个问题简化一下就是:

在 vscode 中调试,在 inspector 端口变更或者 websocket id 变更后能够重连。 在 devtools 中调试,在 inspector 端口变更或者 websocket id 变更后能够重连。

解决方案

目前业界已经有解决方案就是 chrome 插件 Node Inspector Manager(Nim) ,不过这个只能解决在同个 inspector 端口下的应用重启后链接更改的问题,却无法解决 cluster 启动导致的端口自增问题,除非在 Nim 中提前指定好多个端口,再者 Nim 是 chrome 上的插件,对于在 vscode 中的调试却无能为力了。

所以最佳的解决方案自然是使用 node 来做 inspector 代理,解决方案如下:

对于第一个问题,在 vscode 上,它是会自己去调用 /json 接口获取最新的 websocket id,然后使用新的 websocket id 连接到 node inspector 服务上。因此解决方法就是实现一个 tcp 代理功能做数据转发即可。

对于第二个问题,由于 devtools 是不会自动去获取新的 websocket id 的,所以我们需要做动态替换,所以解决方案就是代理服务去 /json 获取 websocket id,然后在 websocket 握手的时候将 websocket id 进行动态替换到请求头上。

画了一张流程图:

实现步骤

一、Tcp 代理

首先,先实现一个 tcp 代理的功能,其实很简单,就是通过 node 的 net 模块创建一个代理端口的 Tcp Server,然后当有连接过来的时候,再创建一个连接到目标端口即可,然后就可以进行数据的转发了。

简易的实现如下:

浅谈Node Inspector 代理实现(浅谈幼儿良好行为的培养论文)

上面实现了比较简单的一个代理服务,通过 pipe 方法将两个服务的数据连通起来。client 有数据的时候会被转发到 server 中,server 有数据的时候也会转发到 client 中。

当完成这个 Tcp 代理功能之后,就已经可以实现 vscode 的调试需求了,在 vscode 中项目下 launch.json 中指定端口为代理端口,在 configurations 中添加配置

那么当应用重启,或者更换 inspect 的端口,vscode 都能自动重新通过代理端口 attach 到你的应用。

二、获取 websocketId

这一步开始,就是为了解决 devtools 链接不变的情况下能够重新 attach 的问题了,在启动 node inspector server 的时候,inspector 服务还提供了一个 /json 的 http 接口用来获取 websocket id。

这个就相当简单了,直接发个 http 请求到目标端口的 /json,就可以获取到数据了:

上面数据中的 id 字段,就是我们需要的 websocket id 了。

三、Inspector 代理

拿到了 websocket id 后,就可以在 tcp 代理中做 websocket id 的动态替换了,首先我们需要固定链接,因此先定一个代理链接,比如我的代理服务端口是 ,那么 chrome devtools 的代理链接就是:

chrome- ws=.0.0.1:/__ws_proxy__ 其他都是固定的,而最后这个也一眼就可以看出来是 websocket 的链接。其中 __ws_proxy__则是用来占位的,用于在 chrome devtools 向这个代理链接发起 websocket 握手请求的时候,将 __ws_proxy__ 替换成 websocket id 然后转发到 node 的 inspector 服务上。

对上面的 tcp 代理中的 pipe 逻辑的代码做一些小修改即可。

通过 through2 创建一个 transform 流来对传输的数据进行一下更改。

简单判断一下 chunk 的头三个字节是否为GET,如果是 GET 说明这可能是个 http 请求,也就可能是 websocket 的协议升级请求。把请求头打印出来就是这个样子的:

然后将其中的路径/__ws_proxy替换成对应的 websocketId,然后转发到 node 的 inspector server 上,即可完成 websocket 的握手,接下来的 websocket 通信就不需要对数据做处理,直接转发即可。

接下来就算各种重启应用,或者更换 inspector 的端口,都不需要更换 debug 链接,只需要再 inspector server 重启的时候,在下图的弹窗中

点击一下 Reconnect DevTools 即可恢复 debug。

最后

上面的详细代码可以在下面的 git 中找到:

Tcp 代理: Inspector 代理:

标签: 浅谈幼儿良好行为的培养论文

本文链接地址:https://www.jiuchutong.com/biancheng/379468.html 转载请保留说明!

上一篇:Node做中转服务器转发接口(node转go)

下一篇:pm2 部署 node的三种方法示例(pm2启动nodejs)

  • 税收优惠属于政策吗
  • 金税盘是每天有5次机会吗
  • 固定资产报废属于非常损失吗
  • 房产税和城镇土地使用税的区别
  • 发票与入库单明细不一致税务可以吗
  • 应交增值税减免税款怎么结转
  • 权益筹资额计算公式
  • 汇总缴纳增值税的三级公司怎么汇总备案
  • 应收留抵税额退税款科目是资产类
  • 建筑安装业什么时候确认收入
  • 非广告公司可以开广告费发票吗?
  • 本票汇票支票的区别
  • 个人独资企业可以不开公户吗
  • 红利所得分配也要交税吗
  • 公司没有发票的做内账,那么支付款从哪里来
  • 预收账款增值税和消费税纳税时间
  • 南京房产税2021年
  • 去税务局税种认定需要带什么资料
  • 建筑业会计实操视频教程
  • 管理费用属于什么现金流量项目
  • 采购原材料运费会计分录
  • 财务报告报送与信息采集季报怎么填写
  • 销售费用变动率公式
  • 未分配利润可以转实收吗
  • 股权激励取消怎么处理?
  • 我公司的某供应商英语
  • 在资本相对充足的情况下,为什么还要进一步引进外资
  • 代开专用发票的流程资料要求
  • 巴伐利亚州地图
  • css实现轮播图侧边阴影效果
  • 企业所得税申报表模板
  • 外贸企业购货合同要交印花税吗
  • 将织梦dedecms转换到wordpress
  • 表单验证方法一般有哪几种
  • 年应税额是怎么算的
  • 民办学校学费收入
  • 机动车发票哪几联 做帐
  • 工会经费是应付职工薪酬的借方还是贷方
  • 公司出资认缴和实缴的区别
  • python wraps函数
  • python2.7读取文件
  • day35-JSON&Ajax03
  • 留言板系统php
  • 浅谈建筑地基基础加固施工技术亲
  • dedecms怎么改图片
  • 个人发票抬头和税号是什么
  • 以前年度无形资产摊销
  • 没有抄税会导致什么情况
  • 实收资本账务处理错误可以调减吗
  • 机票的退票费可以开具发票吗
  • 支付的中介费进什么科目
  • 上月暂估成本次月用冲回吗
  • 为什么小规模纳税人少
  • 建筑公司收到的工程服务发票怎么做账
  • 企业发生坏账损失时,在当期确认坏账损失
  • 红字专用发票怎么做账
  • 培训费怎么算个人所得税
  • 记帐凭证会计处理程序及其应用
  • 无形资产是当月计提折旧吗
  • 企业增资还需要增资账户么
  • mysql启动错误1067 进程意外终止
  • 免激活合法使用的软件
  • 在windows 10
  • win7可以免费升win10
  • win7系统IE浏览器打开跳转到360浏览器,怎么阻止
  • raid磁盘阵列教程
  • vim三种模式及其之间的切换
  • rgb颜色相加
  • nodejs连接mongodb副本集
  • 用javascript
  • js复制对象的方法有哪几种
  • services的翻译
  • jquery教程实例
  • 领导班子和领导干部的区别
  • 成都市武侯区地址
  • 沈阳市税务局全称
  • 2018年小微企业所得税优惠政策
  • 伙食补助和伙食费
  • 出口退税的企业货币要回国内吗
  • 关于切实加强建筑施工领域安全防范工作
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设