Skip to content
Michael.X edited this page Oct 9, 2017 · 4 revisions

代码结构

+-XX-Net/  
  |  
  +-launcher/ 加载器,负责系统启动、升级、WebUI框架管理  
  | |  
  | +-lang/ 国际化翻译文件  
  | |  
  | +-web_ui/ 系统的web 文件  
  |  
  |  
  |  
  +-python27/ 自带的python Windows解释器及各平台的python库  
  | |  
  | +-1.0/  
  |   |  
  |   +-lib/  
  |   | |  
  |   | +-darwin/  MacOS的库  
  |   | |  
  |   | +-noarch/  平台无关的库  
  |   | |  
  |   | +-win32/   windows平台的库  
  |   | |  
  |   | +-linux/   linux平台的库  
  |   |  
  |   +-WinSxS/    Windows平台的补丁  
  |   
  |  
  |  
  |  
  +-data/          用户数据目录,第一次启动时创建  
  | |  
  | +-launcher/    加载器相关数据文件  
  | |  
  | +-downloads/   下载文件用到的临时目录  
  | |  
  | +-gae_proxy/     gae_proxy相关的数据目录  
  |   |  
  |   +-certs/     临时生成的网站证书目录  
  |  
  |  
  |  
  +-gae_proxy/       GoAgent模块  
    |  
    +-server/      服务端目录  
    | |  
    | +-lib/       部署用到的google app engine的库  
    | |  
    | +-gae/       GAE服务端代码  
    |  
    +-local/       本地代码  
    |  
    +-web_ui/      遵循launcher框架的UI文件    

详细的说明,已经放到源码的开头处,或者函数/类的开头处。
放在文档的开头处,方便文档的及时更新和同步。
有不明白的地方,请在Issue区交流。

======================================================== Launcher文件简介:
init.py
start.py 启动文件,由根目录的start.xxx调用
config.py 系统配置文件
logging.py 日志管理
module_init.py 模块起、停管理
update_from_github.py 从github下载更新包
update.py 从appspot查询更新
autorun.py 开机启动设置
web_control.py WebUI的控制代码
gtk_tray.py Linux的托盘
mac_tray.py MacOS 的托盘
win_tray.py Windows的托盘
non_tray.py 无桌面的托盘,给Linux/openwrt等用
simple_i18n.py 国际化的简单实现
setup_win_python.py 给Windows打补丁用
create_shortcut.js 创建Windows桌面图标的脚步

========================================================
****GAE_proxy文件简介: ****
init.py
proxy.py 启动文件,由上层目录的start.py调用
proxy.ini 默认配置文件,请不要修改
appids_manager.py appid 管理器
check_ip.py 扫描ip的执行模块,包含了各种测试代码
config.py 配置加载器
connect_control.py 连接控制,目前无用
connect_manager.py 连接池管理器
direct_handler.py google业务直连方式
gae_handler.py GAE代理业务层
generate_ip_range.py 生成扫描ip范围文件,能合并重叠的范围,平时不用
good_ip.txt 自动的可用ip库
good_ipv6.txt ipv6的可用库
google_ip.py google ip管理模块
google_ip_range.py 加载google ip的模块,在范围内随机选择一个ip
ip_range.txt 扫描的ip 范围文件
ip_utils.py 辅助库
logging.py 日志管理模块
openssl_wrap.py 封装openssl库
pac_server.py PAC 自动代理服务
proxy.pac 自动带的配置文件
proxy_handler.py 代理端口的服务,解析后,把请求转发给gae_handler和direct_handler
scan_ip_log.py 扫描ip的日志管理
web_control.py WebUI控制的实现模块
cert_util.py 证书管理:生成、导入
cacert.pem 验证google服务端的证书库

=========================================================

launcher启动器介绍:

启动器框架特性:

  • 实现了Windows/Linux/Mac 3个平台的Python支持
    Python 门槛低,各种库丰富,性能良好(对单用户使用完全足够)
    跨平台,代码清晰容易维护。
    正在开发对Android/IOS的平台支持。
    实现一套代码,在5个平台上运行

  • 系统托盘实现
    方便后台进程在桌面上操作

  • 系统启动时自动加载功能

  • 基于Web的UI框架
    Html5/js/CSS等技术,门槛低,跨平台,更多人能够参与。
    支持国际化翻译

  • 自动升级
    对用户友好的升级方式
    对开发方便的版本管理

=========================================================

GAE_proxy技术点介绍:

  • IP扫描
    每次从IP范围池中,随机选取一个ip,试探连接并判断有效性,记录握手时间
    IP范围池可在WebUI上进行添加、修改;
    扫描线程可调节;
    默认启动自动调节:对握手时间进行排序,根据第100个ip的握手时间,调节扫描的线程;
    如果握手实现小于200ms,就停止扫描,如果握手时间大于300ms,就全速扫描。

    WebUI上有导入、导出 IP的功能,方便使用官方goagent的用户

    最多保留3000个ip,有更多的,加入后剔除最慢的ip。

  • IP管理机制
    按ip握手时间进行排序;
    每次使用ip,从最小握手时间自动选取;
    每个ip,只建立一条ssl 连接,多连接在大量数据传输时会触发GFW规则失效
    连接失败的ip,在排序时会排到后面
    为了避免网络不通时,把所有ip都变成无效,会访问一个可靠的网站来判断,目前使用baidu判断

  • 连接池
    在ip质量不足时,需要维持可用连接池,以满足需要时能够立即响应。
    目前默认保持10个连接。
    每个连接,每60秒需要活跃一次,否则服务端会断开。
    使用过的连接,会回收到连接池,下次可以重复使用
    使用过的连接,其host不能改变,因此修改appid时,所有连接要重建

=========================================================

产品化设计:

翻墙本身是件麻烦的事情,如何减低门槛,让更多人去翻墙。

因此XX套件采用Web界面管理的方式,尽量减少命令行、配置文件的方法。
Web 界面,也尽量保持简介,各种提示,只在需要时才出现,比如在appid输入框点击后,才会显示相关提示。

高级用户独立使用

  • gae_proxy/local 目录可独立工作,使用python proxy.py 可以直接启动。
  • gae_proxy/server 可以命令行部署服务端,使用 python uploader.py 或 uploader.bat 可以命令行部署

版本管理说明

版本管理

技术选择

Python语言的选择

Clone this wiki locally