码迷,mamicode.com
首页 > 其他好文 > 详细

端口转发器

时间:2017-02-18 12:05:51      阅读:298      评论:0      收藏:0      [点我收藏+]

标签:代理   网址   for   目标地址   time   网络通信   UI   python   性能测试   

功能:

支持本机和远程ip端口tcp数据转发。

支持tcp短连接(http等)和长连接(基于tcp大容量(GiB以上)文件传输)。

 

工作流程简述:

转发器建立监听端口p1,接收到新连接请求后,建立新连接s1,再建立与目标地址端口p2新连接s2,然后s1、s2组合为一条新转发线路。最后开始转发数据。

 

基于go语言开发,使用go默认net库。Go 语言层面采用阻塞+多协程模式,进行网络通信。

 

网络模型:

因为go的默认net库,底层基于非阻塞+多路复用模型(windows iocp、linux epoll),

所以转发器实质模型为非阻塞+多路复用模型。保证了转发器的高性能。

 

性能:

与之前的python版本相比,性能提高200-300倍。因为python版本,网络模型采用阻塞+多线程轮询模式,并非python的高性能网络模型。这样的性能差异与编程语言的执行效率并无太大关联。如果python使用异步多路复用模型,两者的性能差应该在10-20倍之间。

 

基于http代理端口转发性能测试,python版本典型cpu占用为20%-30%,go版本典型cpu占用为0.05%-1%。

 

性能测试硬件平台:

 

Cpu  i3  2核心,4线程

内存 12GiB

硬盘 三星固态硬盘 120GiB

 

 

开源协议:

项目基于GPLv3协议开源。

 

项目代码:

项目网址:https://github.com/ypcd/Forwarder

 

使用说明:

 

使用者,需要设定两个address。

一个是转发器的监听address,一个是目标的address。

这些设定都需要在源代码中设定。

源代码forwarder.go -> main() -> service(第一个设定监听address) -> service(第二个设定目标address)

 

两个service 同名,行数不同。

 

设定好后,请在命令行中使用”go install timerm”,安装必要的包。

然后使用”go build forwarder.go” 获得forwarder可执行程序。

或者采用”go run forwarder.go” 直接运行。

 

端口转发器

标签:代理   网址   for   目标地址   time   网络通信   UI   python   性能测试   

原文地址:http://www.cnblogs.com/yipiancaidi/p/6412696.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!