Skip to content

Add backpressure handling for txChannel#78

Closed
abolix wants to merge 2 commits intomasterking32:mainfrom
abolix:abolix-distpatcher-fix
Closed

Add backpressure handling for txChannel#78
abolix wants to merge 2 commits intomasterking32:mainfrom
abolix:abolix-distpatcher-fix

Conversation

@abolix
Copy link
Copy Markdown
Contributor

@abolix abolix commented Mar 31, 2026

Implemented backpressure handling for txChannel to prevent packet loss.
Prevents silent packet drops under TX congestion

Implemented backpressure handling for txChannel to prevent packet loss.
@masterking32
Copy link
Copy Markdown
Owner

این یکم داستان داره.
یک اینکه شاید بهتر باشه idle + txSpaceSignal بشه یا همون سیگنال چون ما سیگنال رو ارسال میکنیم.
مورد بعدی که این بخش مشکل داره ممکنه پکت داپلیکیشن باشه برای 1 کانکشن بفرسته برای بقیه Wait یا دراپ کنه حس میکنم یا کل پکت باید دور ریخته بشه برای همه کانکشن ها یا باید به اندازه کانکشن ها فضا داشتیه باشیم، اینجوری ممکنه 1 پکت ارسال بشه، برسه به مقصد Duplicationش مجدد بعد مثلا یه تاخیری ارسال بشه که عملا ممکنه بی فایده باشه یعنی باید قبلش len(conn) رو چک میکردیم.
در کل اینا مواردیه که راجب این بخش بهش میشه اشاره کرد شاید موارد بیشتری هم باشه ولی الان اینا به ذهنم میرسه.
یکم عجیب غریب توضیح دادم ولی قابل فهمه xD

@abolix
Copy link
Copy Markdown
Contributor Author

abolix commented Mar 31, 2026

منطقی میگی به اینجاش فکر نکرده بودم.
باید به جای time.After باید از txSpaceSignal استفاده شه.
و کلا لوپ باید قبل for _, conn := range conns بیاد . (خط 399)

یه چنین چیزی فکر کنم منطقی کنه کارو


		if !c.txChannelHasCapacity(len(conns)) {
			select {
			case <-ctx.Done():
				return
			case <-c.txSpaceSignal:
				if !c.txChannelHasCapacity(len(conns)) {
					continue dispatchLoop
				}
			case <-idleTimer.C:
				if !idleTimer.Stop() {
					select {
					case <-idleTimer.C:
					default:
					}
				}
				idleTimer.Reset(idlePoll)
				if !c.txChannelHasCapacity(len(conns)) {
					continue dispatchLoop
				}
			}
		}

@masterking32
Copy link
Copy Markdown
Owner

این بهتره ولی خب همون یک پکت ممکنه از یک کانکشن هم بره توی duplication رو بقیه گیر کنه

@abolix
Copy link
Copy Markdown
Contributor Author

abolix commented Mar 31, 2026

فعلا متاسفانه اینترنت به شدت کنده . فعلا این PR رو باز بذار . من صبح بررسی میکنم چند تا تست میگیرم خبرشو میدم .

جدا از این بحث ؛ یه دو مورد فیچر هم تو ذهنم هست.
1 - ست کردن DNS ها با Cloudflare API روی سرور خارج
2 - اضافه کردن sing-box یا xray-core برای خروجی vless روی کلاینت (این البته خیلی جای بحث داره).

اگه برات مقدور بود تلگرامم بهم یه پیام بده.

Refactor dispatch loop to handle context cancellation and idle timer more effectively, improving packet handling and backpressure management.
@abolix
Copy link
Copy Markdown
Contributor Author

abolix commented Mar 31, 2026

یه کامیت جدید زدم . بصورت کلی هر کاریش کنیم بلاخره Race اتفاق میافته ولی بنظرم نسخه کامیت شده به نسبت وضعیت فعلی بهتره. حالا باز خودت یه Double check کن.

@masterking32
Copy link
Copy Markdown
Owner

امروز داشتم یه تستی میگرفتم حس میکنم یه جا گیر داریم، بزار ببینم به این موضوع ربط داره یا نه، بعد این PR رو چک میکنم.

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

Successfully merging this pull request may close these issues.

2 participants