Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

建议:官方推行统一的配置二维码标准 #1392

Closed
DarienRaymond opened this issue Jun 8, 2018 · 14 comments
Closed

建议:官方推行统一的配置二维码标准 #1392

DarienRaymond opened this issue Jun 8, 2018 · 14 comments
Milestone

Comments

@DarienRaymond
Copy link
Contributor

From v2ray-core created by pipilupipixia : #1139

如题。现在不同的客户端使用不同的标准(已经至少有两套),因此售卖面板就需要给不用的客户端适配多种标准,这对于v2ray的整个生态链无疑是不利的。
建议官方推行统一的二维码配置标准,并尽可能简单(如base64整个outbound的json配置部分)。

@DarienRaymond
Copy link
Contributor Author

二维码很流行,但不代表它就是唯一的解决方案了。官方希望看到有不同的方案出现,比较之下才能看出更优秀的解决方案。

@ghost
Copy link

ghost commented Jun 11, 2018

因为core的客户端是单服务器的(除了vmess的负载均衡),所以推出多服务器的配置储存方案或者格式用于GUI客户端我觉得是十分有必要的

@Cwek
Copy link

Cwek commented Jul 1, 2018

core做得单纯一些比较好,不过直接把(给接入用户的)JSON数据直接用base64序列化后或者可以考虑?

@ghost
Copy link

ghost commented Jul 10, 2018

只编码outbound就把v2ray的很多功能都浪费掉了。
编码整个config.json会有个坑,如果配置太长生成二维码和扫描二维码都比较困难。
目前我正在试验的是把一些可公开的/重复的配置模板化放到网上,
然后通过import导入那些配置来简化config.json。

@Cwek
Copy link

Cwek commented Aug 10, 2018

@kingsznhone 主要是ss的功能很简单,所以只有接入信息就可以了。v2是一套平台,还包括了路由信息等,这部分需不需导出设置?

所以我才说core的功能应该核心化,二维码偏向于外围功能。

@l-we
Copy link
Contributor

l-we commented Aug 29, 2018

不如提供Web接口 支持基本的验证功能 直接通过 url 下载配置文件,这样二维码只需要一个 url 就可以了,缺点就是配置文件要同步到服务器

@kingsznhone
Copy link

kingsznhone commented Sep 8, 2018

去除json语法,直接用字节码表示各项功能的switch位置,能压缩不少空间。再把字节码base64化。可以得到一个非常简短url,再用url二维码化,这是我的想法。
已在fork上加入类库
https://github.com/kingsznhone/v2rayN-1/blob/master/v2rayN/v2rayN/Tool/ByteStream.cs

@ghost
Copy link

ghost commented Sep 10, 2018

@kingsznhone
你好像纠结这个问题很久了。

如果你的目标只是尽可能的缩短分享链接,
其实还有些技巧可以用,比如通过固定每个项的位置,去掉那些那些 F* 前缀
比如,字符串只支持英文和数字,通过6个bit来表示一个字符
这是我写的demo(只是demo所以肯定有bug)
https://github.com/nobody3u/BitStreamEncode/blob/master/BitStreamEncode/Program.cs
原项目已删除,主要代码转存到gist:
https://gist.github.com/nobody3u/cc8616beace6dae9491fbf0a7786c87a

对v2rayn的示例编码后是36个bytes(不含remark)
base64后大概这样子:397e3gD6YtAey61uqc2zyw5Xe688vskAFkAQLJdlKRnMCjgD

不过,上面这些都不是我想说的重点。
我想说的是,分享链接要考虑的不仅仅是长度,还应该考虑易用性和扩展性。
v2rayn的分享链接在长度和易用性上做到很好的平衡。
他的编码方案几行代码就可以解码、编码,不用很复杂的算法。
对于vps这种通常只有个terminal的场合,手动解也不是很难,所以是很不错的编码方案。
不过也有个缺点,扩展性比较差,想添加新功能就要修改标准。

扩展性上Kitsunebi的编码方案要好些,可惜那个?和uri encode把编码复杂化了。
要是直接用key/value对,然后整个base64编码就好很多。
好像跑题了,总的来说,不要太在意编码长度。

@kingsznhone
Copy link

kingsznhone commented Sep 13, 2018

@kingsznhone
你好像纠结这个问题很久了。

如果你的目标只是尽可能的缩短分享链接,
其实还有些技巧可以用,比如通过固定每个项的位置,去掉那些那些 F* 前缀
比如,字符串只支持英文和数字,通过6个bit来表示一个字符
这是我写的demo(只是demo所以肯定有bug)
https://github.com/nobody3u/BitStreamEncode/blob/master/BitStreamEncode/Program.cs
对v2rayn的示例编码后是36个bytes(不含remark)
base64后大概这样子:397e3gD6YtAey61uqc2zyw5Xe688vskAFkAQLJdlKRnMCjgD

不过,上面这些都不是我想说的重点。
我想说的是,分享链接要考虑的不仅仅是长度,还应该考虑易用性和扩展性。
v2rayn的分享链接在长度和易用性上做到很好的平衡。
他的编码方案几行代码就可以解码、编码,不用很复杂的算法。
对于vps这种通常只有个terminal的场合,手动解也不是很难,所以是很不错的编码方案。
不过也有个缺点,扩展性比较差,想添加新功能就要修改标准。

扩展性上Kitsunebi的编码方案要好些,可惜那个?和uri encode把编码复杂化了。
要是直接用key/value对,然后整个base64编码就好很多。
好像跑题了,总的来说,不要太在意编码长度。

易用性对于普通用户来说,都是复制粘贴截屏扫一扫的事情,但这个事情肯定要v2core推动才能建立真正的标准,我只会写C#,没办法做到给所有的客户端都写个fork,所以我只写了一个c#类库作为参考。
至于扩展性,0xFn定位的扩展性非常强,这一点我参考了midi file format,可以做到同一个配置生成N!个不同的字节串,甚至还可以玩类似图种这样的东西。
像我自己的鸡,用的是nginx反代的tls+ws,配置里有域名和二级目录的字符串,必须要用0xfn的定位判断地址是IPv4还是域名

另外我看了你的code,感觉嵌入v2rayN有点困难,你的类中又定义出来了一个新的vmess,整个工程读起来像是一个exe文件,有些面向过程。

@VictoriaRaymond VictoriaRaymond transferred this issue from v2ray/Planning Nov 13, 2018
@VictoriaRaymond VictoriaRaymond added this to the Version Next milestone Nov 13, 2018
@nb5p
Copy link

nb5p commented Nov 23, 2018

确实应该统一一下,希望二维码或链接可以尽可能的简短。当前流行的方案都是把备注信息放在了里面被编码了,导致很长。感觉ss的一种编码方式比较好,把节点备注放在协议最后面用#分割。

@GavinZhengOI
Copy link

@IrineBrunner
多个二维码在售卖面板当然没什么大问题。
但是如果考虑到用户之间的信息传输呢?
用户之间传递二维码就很麻烦了啊

@jiuqianyuan
Copy link

什么时候能统一好啊,分享的时候老是要手动更改算法 alterid什么的

@Cwek
Copy link

Cwek commented Dec 27, 2018

最简单的方法就是将json配置文件去除格式后用base64序列化,然后导入的时候允许解析软件要合并的第一层键值对,因为最核心的就是outbound的字段,例如routing等就不一定需要导出。

@VictoriaRaymond
Copy link
Member

Closing this issue in favor of #1487.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants