欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

wmproxy,一個用Rust編寫的HTTP/HTTPS、SOCKS5正向/反向代理等工具,具有內網穿透、流量控制等功能


2024年12月5日 16:39 本文熱度 583

導讀

文章介紹了wmproxy,一個用Rust編寫的HTTP/HTTPS代理、SOCKS5代理等工具,具有內網穿透、流量控制等功能。通過數據流控的例子,展示了如何通過RateLimitLayer和PollSemaphore進行高效的數據調度和限制流量。

wmproxy

wmproxy已用Rust實現http/https代理, socks5代理, 反向代理, 靜態文件服務器,四層TCP/UDP轉發,內網穿透,后續將實現websocket代理等,會將實現過程分享出來,感興趣的可以一起造個輪子。

項目地址

國內: https://gitee.com/tickbh/wmproxy

github: https://github.com/tickbh/wmproxy

溫柔的小姐姐

??我的名字叫 流控,至于我的工作你們看到我的名字也想必很清楚,我被創造出來為了的這世界更美好,期望這世界永遠不會堵車,所以他們稱我為溫柔的小姐姐。

與數據不得不說的故事

??數據是個急性子的家伙,每次看他總是充充忙忙的帶著一大推的大部分,想在我這里橫沖直撞的。這就不得不說上一次他那急忙的模樣了。

??還記得上次他帶著一大幫的兄弟,成千上萬個的,知道的人知道他們在護送重要資料,不知道的還以為他們去打仗呢!

??我守護的是一個廣場,還有廣場后面的一條路。

??那一次他帶著兄弟來的太快,就跟我說:“流控姐姐,快點通往廣場的門打開,我這邊有兄弟們來了”。

??我就把門打開,讓他帶著他的兄弟們過來快速的進入廣場。

??不一會兒廣場慢慢的有點擠了起來,他就跟我說:“你快點把廣場前面的路開大點,后面的兄弟來的太快,這條路又不能快速的通過,會把你的廣場擠滿的”。

??我就說:“不行哦,我接到上級的指令,通知說現在這條路只能開這么大,每秒通過100人最多了(限速1M/S),前面那條大路現在的人太多了,你這邊要是太多的人會全部堵在一起的?!?/p>

??他就急忙的問:“那怎么辦,我現在數據很重要,也很急,你看旁邊那些無關的也一直在占用著路,你能不能向你的上級反饋一下?”

??我就說:“我現在就幫你反饋一下,但是要等下上級的調度哦。暫時你還是只能通過這么多!”

??我轉身向上級說:“這邊有大量的重要數據擁堵在廣場這,他們請求調高優先級,提高緩沖區及通行速度。”

??上級答:“我現在去協調一下,把其它的數據叫他們先緩緩,你叫他先耐心等待下”

??眼看著上級的指定還沒有下來,但是廣場上已經快擠滿了人了,我趕緊去那個廣場的入口處理,我就把那個廣場前的那個閘機打開,不讓新的人進來。要不然等下廣場出事故了。

??數據兄弟看著我,我也表示我暫時也無能為力,我說:“讓你后面的兄弟緩緩,我這廣場暫時容納不下那么多人了(數據緩沖區已滿,不再接收新的數據,也不會讀出socket上的數據,反向的壓著流量的傳輸)。”

??此時正在我們焦急等待的時候,上級傳來了指令,說其它位置已經暫緩處理了,你當下可以把廣場外圍開起來,并把廣場前面的路兩邊都放開(優先級調高,優先傳輸重要數據)。

??我就立馬啟動了擴容的按鈕,只見廣場外圍的大圈全部打開,可以容納10倍的人,并把廣場前的出口路打開,可以通行10000人/s限速100M/S)。

??數據說:“快快快,已經可以通行了,快把閘機打開,我要趕緊帶著兄弟們把資料送到。”

??只看到廣場出去的人比進入的人多了很多,廣場一下子空了起來。

??很快數據就全部帶著他的兄弟走了,去完成任務了,說:“等我完成這任務,我向你來討教討教你這邊的管理法,怎么能保證高效的完成調度的任務”。

當起了老師

數據完成了他的任務,回來的時候在跟我請教了起來。

??數據說:“我就是想問問,你的那個廣場是怎么個情況,怎么一滿了就可以自動防止人進入,然后一空了就可以通知人進入的。”

??我跟他解答說:“我這是一個異步處理的一把刀,我可以在空閑的時候完全的不占用任何的資源,在忙碌的時候又可以把全部的CPU用上。完成高效的運轉。”

??數據問:“那你用了什么秘密法寶,他這么厲害?”

??我說:“我就是用了一種古代就開始在用的——旗語,也就是PollSemaphore,我這里存一把旗,并存了一把鑰匙,當我有鑰匙的時候,也就是廣場人沒滿的時間,你來了我就放你進場,這樣子我也不用管廣場里有沒有滿。當你進入后,如果 廣場滿了,他會將我手上的鑰匙拿走。沒有鑰匙的話,新進來的人我就不會讓你們進入了。”

??數據問:“那如果廣場有位置的話,那你怎么樣才能重新得到鑰匙?”

??我說:“這就是我高效的時候了,剛剛我鑰匙交出去的時候,我已經調用了self.sem.poll_acquire(cx),當廣場有人出去的話,他就會通知Waker,然后我就可以主動去找他拿到鑰匙了,這樣子我就可以重新擁有鑰匙了?!?/p>

??數據說:“原來你緩沖區是這樣子的吖,那你出口的那條路上,怎么限定人流量的?”

??我說:“這個就要有請RateLimitLayer了,他有定義了per每個周期的時間就比如每秒,或者每分鐘,或者每小時,nums就是每個周期內可以通行的字節數。下面是詳細的定義。”

pub struct RateLimitLayer {

    /// 周期內可以通行的數據

    nums: u64,

    /// 每個周期的時間

    per: Duration,

    /// 當前周期下,還剩下可通行的數據

    left_nums: u64,

    /// 下一個時間重新計算的日期

    util: Instant,

    sleep: Pin<Box<Sleep>>,

}

??數據問:“那如果當前周期耗完的話,是不是還沒有到下個周期前就不能繼續通行了?”

??我答:“確實是的,你當前周期耗光了可用的額度,那不能通行了哦,我就會向Pin::new(&mut self.sleep).poll(cx).is_pending(),如果他現在不能用,就等會到那個時間,他就會通知我啦。他通知我,我就會重置掉到前的數據,這樣子你就可以繼續通行了。”

self.left_nums = self.nums;

self.util = Instant::now() + self.per;

self.sleep.as_mut().set(tokio::time::sleep_until(Instant::now() + self.per));

??數據說:“小姐姐你好厲害,還好有你在這里嚴格的控制著,我才能那么準時的到達”。

??我答:“那是,請叫我溫柔的一刀,該嚴格的時候我就會嚴格,不嚴格那只會更麻煩。你說是吧?!?/p>

流控在互聯網中是很重要的概念,因為基本上大部分的公網出口都不是無限的,就同一個網站,API的接口重要性肯定會比靜態文件重要性來的高,所以為了使系統更穩定,感謝流控小姐姐使出這溫柔的一刀。


該文章在 2024/12/5 19:01:50 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved