分享
  1. 首页
  2. 主题
  3. Go代码分享

转发器

ypcdgo · · 5012 次点击 · 开始浏览 置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

转发器 功能: 支持本机和远程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" 直接运行。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
5012 次点击 ∙ 1 赞
1 回复 | 直到 2018年06月05日 22:12:00
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)