Skip to content

selector 相关的改进建议 #2624

Open
@ReleTor

Description

描述

方案一:使用路由动作替代原本的 selector urltest 出站(存在问题)

受上述内容启发,SelectorURLTest 有改造为 action 的条件:将现有的 route 动作变更为支持指定多个出站,然后通过指定 mode 的方式来决定具体使用哪一个作为出站。其中 mode 支持手动选择 selector ,自动选择 urltest 。如果可能的话可以提供更丰富的模式用于实现类似负载均衡的效果,比如提供随机选择、轮询选择、权重选择等。

{
  "action": "route",
  "outbounds": [ // 数组长度为 1 时可以直接使用字符串
    "proxy"
  ],
  "default": "", // 默认第一个出站
  "mode": "", // 默认是手动选择
  // ... 特定模式的额外字段
  // ... 其余 route 字段
}

此方案存在一些不足:

  • 路由动作:selector 目前只允许指定出站节点而无法使用其它的最终动作。
  • 嵌套使用:使用 action 替代出站后会导致 selector 无法嵌套。

方案二:提供负载均衡出站支持

提供一个新的类似于 selector 的负载均衡出站,并提供不同的负载均衡策略,比如随机选择、轮询选择、权重选择等。

{
  "type": "balancer",
  "outbounds": [
    "node-a",
    "node-b",
    "node-c"
  ],
  "mode": "",
  "default": "node-a",
  "interrupt_exist_connections": false,
}

方案三:支持 selector 的选项作为路由条件

selector 作为单独的字段,其选项不再限定为节点。

{
  "selectors": [
    {
      "name": "广告过滤"
      "options": ["开", "关"],
      "default": "关"
    }
  ],
  "route": {
    "rules": [
      {
        "selector": "广告过滤",
        "selector-value": "开",
        // ...
      }
    ]
  }
}

目前通过 clash_mode 可以实现类似的效果,但 clash_mode 只有一个因此当用户存在多个需要手动选择的条件时会变得乏力。

支持我们

完整性要求

  • 我保证阅读了文档,了解所有我编写的配置文件项的含义,而不是大量堆砌看似有用的选项或默认值。
  • 我保证提供了可以在本地重现该问题的服务器、客户端配置文件与流程,而不是一个脱敏的复杂客户端配置文件。
  • 我保证提供了可用于重现我报告的错误的最简配置,而不是依赖远程服务器、TUN、图形界面客户端或者其他闭源软件。
  • 我保证提供了完整的配置文件与日志,而不是出于对自身智力的自信而仅提供了部分认为有用的部分。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions