sqkam

Results 12 comments of sqkam

> > 目前代码每次新建 UDPConn 就是为了换一个本地端口,来保证 src/dst 都发生变化以绕过 QoS。。 > > 难道我被误导了?之前在改 clash 的代码时,是直接重新创建一个 client,这样两边的端口都会换;然后 clash 的开发者告诉我这样不行,会导致源端口被换,与原版实现不一致…… [MetaCubeX/mihomo#982 (comment)](https://github.com/MetaCubeX/mihomo/issues/982#issuecomment-1892276068) > > 我先继续观察吧,目前没有发生 QoS,不知道源端口是不是一个 QoS 因素,毕竟各地的运营商策略不一样。 没误导你,我试了你这个办法,会导致sing-quic新建一个链接去链接服务器,源端口自然会换

看来只能改sing-quic了,我想想办法把quicConn改了😁

大佬你好,我魔改了sing-quic库,newClient的时候调用client 的offerNew()函数,然后也是通过ticker触发NewClient给他创建新的client 实际使用很完美,"端口跳跃"了,新的client中conn可以直接使用,不会断流,核心思想就是到了切换时间,先建立连接,再切换client,不需要等到流量到了client.offer出现错误的时候再去建立连接,我愿称他为伪端口跳跃,这个实现方式怎么样?

> > 大佬你好,我魔改了sing-quic库,newClient的时候调用client 的offerNew()函数,然后也是通过ticker触发NewClient给他创建新的client 实际使用很完美,"端口跳跃"了,新的client中conn可以直接使用,不会断流,核心思想就是到了切换时间,先建立连接,再切换client,不需要等到流量到了client.offer出现错误的时候再去建立连接,我愿称他为伪端口跳跃,这个实现方式怎么样? > > 我不是大佬啊。 看上去可能会有额外的开销,你可以看看 offerNew() 里的后半段,创建了一个 http3.RoundTripper 对象来发起认证请求。 开销最低的方式就是我现在的方案,直接复用之前的连接,往其他端口写,但这不符合原版实现。 其次是创建一个新的 UDP 连接,但是需要同时监听和读写两个连接的数据,说实话这更适合用 epoll 来写(不过不跨平台)。 我这个实现把offerNew改了新增一个方法只获得conn,后面的loopMessage等到实际切换的时候再调用,确实存在这个重新连接,不过好在切换的连接都是可以直接发包的,切换的时候并没有卡顿,体验一晚上感觉很不错,有空学习一下你的代码😁

> 这个实现在与 ClashMetaForAndroid 一起使用时会遇到 hop 后无法继续使用的 bug,原因未知。并且还发现 ticker 在未到期时多次触发的 bug,也不知道原因。 我这个用ClashMetaForAndroid很爽哦,学校公共网20mbps,配置文件写最高15mbps流畅看1080,最开始一个版本用ticker改client,手机会出现触摸失灵,后面改了,不用这个ticker就好了

> 写了个UDP服务来测试,没遇到问题。但是我并没有用到 ctx、opts 这 2 个参数,不清楚是否对于控制超时、连接有什么特殊用处。 ctx控制gorountine退出的opots应该提供拓展空间吧

用了端口跳跃也不行吗

@NEX-S 我之前也是这样,跳得快就可以解决了,同时down不要设置太高