diff --git a/README.md b/README.md index a3caec8..e5c5333 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,9 @@ verysimple -c server.json 极简模式继承自v2simple,理念是字越少越好。推荐没有极简需求的同学直接使用标准模式。 +verysimple 继承 v2simple的一个优点,就是服务端的配置也可以用url做到。谁规定url只能用于分享客户端配置了?一条url肯定比json更容易配置,不容易出错。 + + 另外,极简模式所使用的 url并不是正规的 各个协议所规定的 分享链接格式,而是我们自己的格式,所以链接看起来会略有区别。 以后可以考虑 推出一个 选项,选择 到底是 使用协议所规定的格式, 还是 使用我们verysimple自己的通用链接格式。 @@ -461,9 +464,7 @@ MIT协议,即你用的时候也要附带一个MIT文件,然后作者不承 我fork也是尊重原作者,既然你们这么谨慎,正好推动了我的重构计划,推动了历史发展 ## 额外说明 以及 开发计划 -本项目的目的类似于一种 proof of concept. 方便理解,也因为极简所以比官方v2ray快。 - -也因为是poc,所以我有时会尝试向 verysimple 中添加一些我设计的新功能。目前正在计划的有 +目前正在计划的有 1. 完善并实现 vless v1协议 2. 什么时候搞一个 verysimple_c 项目,用c语言照着写一遍; 也就是说,就算本verysimple没有任何技术创新,单单架构简单也是有技术优势的,可以作为参考 实现更底层的 c语言实现。 @@ -473,9 +474,6 @@ MIT协议,即你用的时候也要附带一个MIT文件,然后作者不承 6. 握手延迟窗口技术,可用于分流一部分流量使用mux发送,达到精准降低延迟的目的;然后零星的链接依然使用单独信道。 -verysimple 继承 v2simple的一个优点,就是服务端的配置也可以用url做到。谁规定url只能用于分享客户端配置了?一条url肯定比json更容易配置,不容易出错。 - - 其它开发计划请参考 https://github.com/hahahrfool/v2ray_simple/discussions/3 @@ -570,7 +568,7 @@ verysimple 版本 v1.0.3 ## 免责 -MIT协议!作者不负任何责任。本项目只是个poc项目,适合内网测试使用,以及适合阅读代码了解原理。 +MIT协议!作者不负任何责任。本项目 适合内网测试使用,以及适合阅读代码了解原理。 你如果用于任何其它目的,我们不会帮助你。 diff --git a/advLayer/grpc/conn.go b/advLayer/grpc/conn.go index 83831fb..fb0ab7d 100644 --- a/advLayer/grpc/conn.go +++ b/advLayer/grpc/conn.go @@ -47,7 +47,7 @@ func (c *Conn) Read(b []byte) (n int, err error) { func (c *Conn) Write(b []byte) (n int, err error) { err = c.stream.Send(&Hunk{Data: b}) if err != nil { - return 0, utils.ErrInErr{ErrDesc: "Unable to send data over stream service", ErrDetail: err} + return 0, utils.ErrInErr{ErrDesc: "Unable to send data over grpc stream", ErrDetail: err} } return len(b), nil } diff --git a/netLayer/splice.go b/netLayer/splice.go index de35afd..7d9f22c 100644 --- a/netLayer/splice.go +++ b/netLayer/splice.go @@ -22,14 +22,14 @@ type Splicer interface { // 若不是基本Conn,则会试图转换为Splicer并获取底层Conn func CanSpliceDirectly(r any) bool { - if _, ok := r.(*net.TCPConn); ok { + switch r.(type) { + case *net.TCPConn: return true - } else if _, ok := r.(*net.UnixConn); ok { - + case *net.UnixConn: return true + default: + return false } - return false - } func CanSpliceEventually(r any) bool { @@ -46,7 +46,6 @@ func CanSpliceEventually(r any) bool { // 如果r本身就不是 basicConn,则调用本函数没有意义, 因为既然拿不到basicConn那就不是裸奔,也就不可能splice。 // func TryReadFrom_withSplice(classicWriter io.Writer, maySpliceConn net.Conn, r io.Reader, canDirectFunc func() bool) (written int64, err error) { - //log.Println("TryReadFrom_withSplice called") underlay_canSpliceDirectly := CanSpliceDirectly(maySpliceConn) @@ -148,7 +147,8 @@ func TryReadFrom_withSplice(classicWriter io.Writer, maySpliceConn net.Conn, r i } -//拷贝自 io.CopyBuffer。 因为原始的 CopyBuffer会又调用ReadFrom, 而我们这里过滤掉了ReadFrom, 希望直接进行经典拷贝 +//拷贝自 io.CopyBuffer。 因为原始的 CopyBuffer会又调用ReadFrom, 如果splice调用的话会产生无限递归。 +// 这里删掉了ReadFrom, 直接进行经典拷贝 func ClassicCopy(w io.Writer, r io.Reader) (written int64, err error) { buf := utils.GetPacket() defer utils.PutPacket(buf)