这是一个新的、使用netty实现的、使用http协议进行混淆的socks5代理。解决了前作sogo项目因go内存回收机制/内存复用机制弱带来的cpu/内存占用高的问题。
... ➦减少造轮子,安装已有socks5、http代理。这里的ss5和squid是不能达到FQ的目的的,要实现这个目的,请查看之前的其他文章。
... ➦以前的博客中有如何使用shell脚本重启应用的教程,也有解决tty的最大打开文件数量限制的方法。其实这些都可以用systemd服务的方式解决。今天就来一个简单的service文件,记录下怎么使用。
使用如下命令即可编写sogo服务的service文件,并设置开机自启动。
... ➦感谢刘港欢大学四年来1218天的陪伴
这是悦悦毕业论文的致谢中的一句话。一篇论文,洋洋洒洒,突然就写到了最后的致谢,这才恍然间发现,我们也过到了大学生涯的结尾。今天4月27日,我刚满22周岁不久。20多年的生命,我从来没有好好回忆过,思考过。想了一想,总归要抖一抖胸中不多的墨水写点什么。借着这个机会,要说说我生命里遇到的那些人,那些事。
... ➦tcp分包一般在pipeline的前部使用DelimiterBasedFrameDecoder, FixedLengthFrameDecoder, LengthFieldBasedFrameDecoder, or LineBasedFrameDecoder,分别适用于固定分隔符、固定长度帧、长度字段、换行符分割四种情况。但是,这四种不能涵盖tcp分包的全部情况,举个栗子:http协议的解析就不是上面四种中的一种。解析http协议或者其他自定义协议时,就需要用到ByteToMessageDecoder创建自己的“流式”解析器。netty的http解析器(HttpObectDecoder)就是继承ByteToMessageDecoder并override decode方法实现的。
... ➦前一篇文章介绍了sogo
这个socks5代理的实现,在原始的sogo实现中,有一个重大的问题是:没有复用内存,导致频繁GC,导致cpu占用很高。对于socket通信这种io密集的应用,复用[]byte
还是很重要的,不然每次去make新的[]byte
,这些[]byte
迟早要被GC,这就导致了cpu占用高的问题。解决这个问题也很简单,就是引入内存池。
之前写了一个http代理,用起来也是十分地舒服,但是有几个点还是有些遗憾的:
所以,我又写了一个socks5代理,起名叫sogo。
sogo本身包含sogo(client)和sogo-server。如果把sogo和sogo-server看成一个整体,一个黑盒,这个整体就是一个socks5代理。sogo(client)与本地电脑交互;sogo-server与目标网站交互;sogo(client)和sogo-server之间的交互就是http协议包裹payload进行通信。
... ➦其实只是博客中想嵌入16:9的youtube视频,但youtube官方的嵌入代码是固定宽度1280,高度720,在手机上表现十分不好。因此有了这个偏前端的主题。
... ➦