Xray-core icon indicating copy to clipboard operation
Xray-core copied to clipboard

Refactor code to use DispatchLink() in vmess inbound

Open yuhan6665 opened this issue 3 months ago • 10 comments

  • Always apply NoTerminationSignal

yuhan6665 avatar Sep 14 '25 03:09 yuhan6665

这个很奇怪 vmess 改了 Link 之后 一般用法没问题 就是 Mux(TCP) 和 reverse proxy 会出现 头几个连接正常 后面死掉的情况 但是 VLESS 却没事

yuhan6665 avatar Sep 14 '25 15:09 yuhan6665

~~好像是因为 vmess 的 mux 只会 DispatchLink 一次 而 VLESS 会多次~~

yuhan6665 avatar Sep 14 '25 16:09 yuhan6665

这样可以修复 4eadb8f 也就是说在 Mux 环境下省掉 pipe 是可能的 但是由于多个子链接会同时写 势必导致代码逻辑较复杂的各个地方需要加锁 所以我觉得在 Mux 环境下用 pipe 的设计可能更好一点? @RPRX

yuhan6665 avatar Sep 15 '25 03:09 yuhan6665

~~我还想让 VLESS 出站也能返回个 reader / writer,这样可以把客户端 outbound reverse 那个 pipe 给省掉~~

RPRX avatar Sep 15 '25 13:09 RPRX

在 Vmess 加锁我觉得不对 因为是全局锁 而 pipe 是锁单个连接 把 pipe 转移到 Mux 那边应该可以 还需要修 reverse。。 另外加了 vlessenc (Mux Tcp) 测试

yuhan6665 avatar Sep 21 '25 14:09 yuhan6665

修好了 你们看一下 mux server 和 reverse portal 这样改行不行 @RPRX @Fangliding

yuhan6665 avatar Sep 22 '25 00:09 yuhan6665

我觉得 VMess inbound 倒是无所谓,只是往 Mux/Reverse 再加 pipe 这种事情尽量避免吧

RPRX avatar Oct 14 '25 21:10 RPRX

我觉得 VMess inbound 倒是无所谓,只是往 Mux/Reverse 再加 pipe 这种事情尽量避免吧

我试了一下 shadowsocks inbound 使用 DispatchLink 也有同样的问题 也就是说 一个 Mux 连接承载多个子连接 应该有一个 Pipe 控制不同子连接 同时 写回包的情况。 Vless 不需要应该被视为是一个特例。 如果 Mux/Reverse 加 pipe 那么所有入站都可以简化 pipe,但是如果不加 只有 Vless 入站能去掉 pipe

yuhan6665 avatar Nov 24 '25 03:11 yuhan6665

Vless 不需要应该被视为是一个特例。

感觉有点怪,难道是因为 VLESS 的加解密是额外的 Read/Write?

RPRX avatar Nov 24 '25 05:11 RPRX

Vless 不需要应该被视为是一个特例。

感觉有点怪,难道是因为 VLESS 的加解密是额外的 Read/Write?

Donno, but in deed vmess/shadowsocks use writeMultiBuffer() instead of conn write()

yuhan6665 avatar Nov 24 '25 23:11 yuhan6665