芜湖,申请的专利终于成功了,虽然其实也是比较简单的东西,但属实是想要分享一下本次申请专利
这个技术最开始还是刚入职时,同事介绍了目前开发痛点:项目过多,有用gulp的,有自己用webpack搭建的,有用vue-cli的。导致了一个问题,每个项目各自的开发方式不同,甚至于启动项目的npm script都不同,导致新人开发很困惑,解决这个问题就是当年的okr目标
同时呢,我在开发一些gulp打包的项目的时候发现有些项目没有dev-server,必须使用charles代理才能开发,但此时我还无法申请charles账号,于是我寻思,nodejs就没有相关的代理工具吗。
其实网上随便就搜到了,github 搜nodejs proxy,发现有一个阿里的anyproxy(事实证明anyproxy不好用,也没人维护了。后续打算更换为whistle),
于是呢,使用anyproxy简单搭建了一个小工具,具体功能就是读取当前项目下的proxy配置,启动一个代理服务器。
这个时候发现全局代理会有比较大的性能问题,又去找了一个chrome插件 Switchy Omega,将一些项目中的域名配置为需要代理,代理地址就是本地代理服务地址。
到此为止,其实就已经大致解决了多项目开发模式不统一的问题,我在每个项目中配好配置文件,然后设定统一的npm script,此script的作用是在执行npm script时执行项目的watch或者server,然后启动proxy服务器(当然这步是不需要开发者关心的,执行就完事了)。然后访问需要代理的网站,切换switchyOmega即可,当然这里的switchyOmega的配置是提前配置好的,导入配置然后切换指定的规则即可。
这里顺便推荐一个可同时执行多个命令行的小工具 concurrently。
后续呢,又反馈了一个问题:如果同时开启多个项目,需要有配置同步功能(主要是可能在开发过程中会有排查其他项目问题的时候)。
一开始呢,我想的是简单搞搞,在启动进程的时候首先判断某个公用路径是否有配置文件,若无则上报当前配置,启动代理服务,并对这个文件进行watch,后续新进程也是判断公共配置文件是否有配置,有,则直接上报配置即可,启动代理进程的进程在杀死时需要删除原有配置
后来发现这种写法有问题,具体就是文件的写入和创建删除是有延迟的,如果主要进程已经被关闭了,在删除文件的过程中我又开启新代理进程,此时文件并没有被删除,会认为已经有代理进程,然后仅作上报配置功能。
后来发现吧,其实本质上就是一个进程间通信的问题,可以复习一下进程间通信的几种方式
- 管道(pipe)
- 消息队列
- 共享内存()
- 信号量(semophore)
- 信号(sinal)
- 套接字
想都不用想,webSocket走起,具体思路是在启动代理服务时,首相判断是否有代理进程启动,若无,则启动两个进程一个具体的代理进程,一个用于上报当前配置进程。于此同时代理进程需要不断判断上报进程是否被杀死,如果被杀死则删除对应的配置,如果已经没有活跃的配置上报进程,则杀死自身(其实就是轮训ping一下所有客户端,挂了就删配置就行)。
到此为止就是本次专利的所有内容了,其实也很简单,但是也确实是日常中所碰到的卡点问题。算是解决了日常工程化问题的一部分。其实这么看来,其实很多时候有些自己想出来的点子要改也是可以申请专利的。