V2RayGCon手册

Release Badge

设计理念

分组

因为以下原因,这个软件没有分组功能:

  1. 分组是个层级结构,增加数据处理复杂度
  2. 分组其实是按单个属性(组名)归类,如果想把一个服务器同时分进多个组就不太好处理
  3. 随着服务器数量增加分组会失效。假设一开始有 500 个服务器,分 5 组每组 100 个服务器,一切都很好。但是如果服务器数量增加到 5000 个,就算分 10 组每组也有 500 个服务器。这时每组的服务器数和原来一样多,并不好管理

这个软件采用贴标签的方式来管理服务器。目前有 标记(mark)备注(remark)标签(tag)1-3 共五个标签,其实就是多属性归类。

插件

以前出于安全考虑只有内置插件,从 v1.8.3 起又重新支持第三方插件。

MailBox

这个功能起源于 Luna 插件 Sys 库。最初是想给不同脚本提供一个相互通信的途径于是做了个 MailBox。原理很简单,就是模拟了现实生活中的寄信过程。但是这个功能做出来之后我都没遇到过需要多个脚本之间通信的情况。所以这个功能就荒废了吗?并没有。后来发现他还能用在 .net(c#) 和 lua 之间通信。其实 Luna 插件里面的全局热键、事件响应、task.lua(更易用的协程)以及 v1.6.9 推出的 Web UI 都是这个小小的 MailBox 撑起来的。这是一个很神奇的小功能。

MailBox 的速度取决于单核性能。低性能 CPU 用两个 MailBox 对发时,每个 MailBox 每秒可以收、发超过 10 万个 mail。足以应付大多数场景了。

怎么防止关机时数据丢失

关机时应用程序处于一个非常不稳定的状态。Windows 系统只给应用程序大约 2 秒的退出时间。在这 2 秒内,不能再启动新线程,也不保证写入文件的数据能完整落盘。文件写一半就断电的情况时有发生,所以会丢失数据。V2RayGCon 采用双配置文件的方式来降低数据丢失风险。具体方法是先写盘 userSettings.json 然后重复写盘一次 userSettings.bak。如果断电发生在写入 .json 时,那么下次启动读取 .bak 就行,反过来如果断电发生在写入 .bak 时,下次启动可以从 .json 读取配置。理论上这个方案无懈可击对不对?然而现实非常魔幻,这种写盘方式下还是会有极低概率出现 .json 和 .bak 同时只写了一半的情况。所以这个问题我还没找到完美解决方案。

Last updated on 1 Feb 2020
Published on 1 Feb 2020
Edit on GitHub