超碰人人人人人,亚洲AV午夜福利精品一区二区,亚洲欧美综合区丁香五月1区,日韩欧美亚洲系列

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

wmproxy,一個(gè)用Rust編寫的HTTP/HTTPS、SOCKS5正向/反向代理等工具,具有內(nèi)網(wǎng)穿透、流量控制等功能


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

導(dǎo)讀

文章介紹了wmproxy,一個(gè)用Rust編寫的HTTP/HTTPS代理、SOCKS5代理等工具,具有內(nèi)網(wǎng)穿透、流量控制等功能。通過(guò)數(shù)據(jù)流控的例子,展示了如何通過(guò)RateLimitLayer和PollSemaphore進(jìn)行高效的數(shù)據(jù)調(diào)度和限制流量。

wmproxy

wmproxy已用Rust實(shí)現(xiàn)http/https代理, socks5代理, 反向代理, 靜態(tài)文件服務(wù)器,四層TCP/UDP轉(zhuǎn)發(fā),內(nèi)網(wǎng)穿透,后續(xù)將實(shí)現(xiàn)websocket代理等,會(huì)將實(shí)現(xiàn)過(guò)程分享出來(lái),感興趣的可以一起造個(gè)輪子。

項(xiàng)目地址

國(guó)內(nèi): https://gitee.com/tickbh/wmproxy

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

溫柔的小姐姐

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

與數(shù)據(jù)不得不說(shuō)的故事

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

??還記得上次他帶著一大幫的兄弟,成千上萬(wàn)個(gè)的,知道的人知道他們?cè)谧o(hù)送重要資料,不知道的還以為他們?nèi)ゴ蛘棠兀?/p>

??我守護(hù)的是一個(gè)廣場(chǎng),還有廣場(chǎng)后面的一條路。

??那一次他帶著兄弟來(lái)的太快,就跟我說(shuō):“流控姐姐,快點(diǎn)通往廣場(chǎng)的門打開,我這邊有兄弟們來(lái)了”。

??我就把門打開,讓他帶著他的兄弟們過(guò)來(lái)快速的進(jìn)入廣場(chǎng)。

??不一會(huì)兒廣場(chǎng)慢慢的有點(diǎn)擠了起來(lái),他就跟我說(shuō):“你快點(diǎn)把廣場(chǎng)前面的路開大點(diǎn),后面的兄弟來(lái)的太快,這條路又不能快速的通過(guò),會(huì)把你的廣場(chǎng)擠滿的”。

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

??他就急忙的問(wèn):“那怎么辦,我現(xiàn)在數(shù)據(jù)很重要,也很急,你看旁邊那些無(wú)關(guān)的也一直在占用著路,你能不能向你的上級(jí)反饋一下?”

??我就說(shuō):“我現(xiàn)在就幫你反饋一下,但是要等下上級(jí)的調(diào)度哦。暫時(shí)你還是只能通過(guò)這么多!”

??我轉(zhuǎn)身向上級(jí)說(shuō):“這邊有大量的重要數(shù)據(jù)擁堵在廣場(chǎng)這,他們請(qǐng)求調(diào)高優(yōu)先級(jí),提高緩沖區(qū)及通行速度?!?/p>

??上級(jí)答:“我現(xiàn)在去協(xié)調(diào)一下,把其它的數(shù)據(jù)叫他們先緩緩,你叫他先耐心等待下”

??眼看著上級(jí)的指定還沒有下來(lái),但是廣場(chǎng)上已經(jīng)快擠滿了人了,我趕緊去那個(gè)廣場(chǎng)的入口處理,我就把那個(gè)廣場(chǎng)前的那個(gè)閘機(jī)打開,不讓新的人進(jìn)來(lái)。要不然等下廣場(chǎng)出事故了。

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

??此時(shí)正在我們焦急等待的時(shí)候,上級(jí)傳來(lái)了指令,說(shuō)其它位置已經(jīng)暫緩處理了,你當(dāng)下可以把廣場(chǎng)外圍開起來(lái),并把廣場(chǎng)前面的路兩邊都放開(優(yōu)先級(jí)調(diào)高,優(yōu)先傳輸重要數(shù)據(jù))。

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

??數(shù)據(jù)說(shuō):“快快快,已經(jīng)可以通行了,快把閘機(jī)打開,我要趕緊帶著兄弟們把資料送到?!?/p>

??只看到廣場(chǎng)出去的人比進(jìn)入的人多了很多,廣場(chǎng)一下子空了起來(lái)。

??很快數(shù)據(jù)就全部帶著他的兄弟走了,去完成任務(wù)了,說(shuō):“等我完成這任務(wù),我向你來(lái)討教討教你這邊的管理法,怎么能保證高效的完成調(diào)度的任務(wù)”。

當(dāng)起了老師

數(shù)據(jù)完成了他的任務(wù),回來(lái)的時(shí)候在跟我請(qǐng)教了起來(lái)。

??數(shù)據(jù)說(shuō):“我就是想問(wèn)問(wèn),你的那個(gè)廣場(chǎng)是怎么個(gè)情況,怎么一滿了就可以自動(dòng)防止人進(jìn)入,然后一空了就可以通知人進(jìn)入的。”

??我跟他解答說(shuō):“我這是一個(gè)異步處理的一把刀,我可以在空閑的時(shí)候完全的不占用任何的資源,在忙碌的時(shí)候又可以把全部的CPU用上。完成高效的運(yùn)轉(zhuǎn)?!?/p>

??數(shù)據(jù)問(wèn):“那你用了什么秘密法寶,他這么厲害?”

??我說(shuō):“我就是用了一種古代就開始在用的——旗語(yǔ),也就是PollSemaphore,我這里存一把旗,并存了一把鑰匙,當(dāng)我有鑰匙的時(shí)候,也就是廣場(chǎng)人沒滿的時(shí)間,你來(lái)了我就放你進(jìn)場(chǎng),這樣子我也不用管廣場(chǎng)里有沒有滿。當(dāng)你進(jìn)入后,如果 廣場(chǎng)滿了,他會(huì)將我手上的鑰匙拿走。沒有鑰匙的話,新進(jìn)來(lái)的人我就不會(huì)讓你們進(jìn)入了?!?/p>

??數(shù)據(jù)問(wèn):“那如果廣場(chǎng)有位置的話,那你怎么樣才能重新得到鑰匙?”

??我說(shuō):“這就是我高效的時(shí)候了,剛剛我鑰匙交出去的時(shí)候,我已經(jīng)調(diào)用了self.sem.poll_acquire(cx),當(dāng)廣場(chǎng)有人出去的話,他就會(huì)通知Waker,然后我就可以主動(dòng)去找他拿到鑰匙了,這樣子我就可以重新?lián)碛需€匙了。”

??數(shù)據(jù)說(shuō):“原來(lái)你緩沖區(qū)是這樣子的吖,那你出口的那條路上,怎么限定人流量的?”

??我說(shuō):“這個(gè)就要有請(qǐng)RateLimitLayer了,他有定義了per每個(gè)周期的時(shí)間就比如每秒,或者每分鐘,或者每小時(shí),nums就是每個(gè)周期內(nèi)可以通行的字節(jié)數(shù)。下面是詳細(xì)的定義?!?/p>

pub struct RateLimitLayer {

    /// 周期內(nèi)可以通行的數(shù)據(jù)

    nums: u64,

    /// 每個(gè)周期的時(shí)間

    per: Duration,

    /// 當(dāng)前周期下,還剩下可通行的數(shù)據(jù)

    left_nums: u64,

    /// 下一個(gè)時(shí)間重新計(jì)算的日期

    util: Instant,

    sleep: Pin<Box<Sleep>>,

}

??數(shù)據(jù)問(wèn):“那如果當(dāng)前周期耗完的話,是不是還沒有到下個(gè)周期前就不能繼續(xù)通行了?”

??我答:“確實(shí)是的,你當(dāng)前周期耗光了可用的額度,那不能通行了哦,我就會(huì)向Pin::new(&mut self.sleep).poll(cx).is_pending(),如果他現(xiàn)在不能用,就等會(huì)到那個(gè)時(shí)間,他就會(huì)通知我啦。他通知我,我就會(huì)重置掉到前的數(shù)據(jù),這樣子你就可以繼續(xù)通行了?!?/p>

self.left_nums = self.nums;

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

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

??數(shù)據(jù)說(shuō):“小姐姐你好厲害,還好有你在這里嚴(yán)格的控制著,我才能那么準(zhǔn)時(shí)的到達(dá)”。

??我答:“那是,請(qǐng)叫我溫柔的一刀,該嚴(yán)格的時(shí)候我就會(huì)嚴(yán)格,不嚴(yán)格那只會(huì)更麻煩。你說(shuō)是吧?!?/p>

流控在互聯(lián)網(wǎng)中是很重要的概念,因?yàn)榛旧洗蟛糠值墓W(wǎng)出口都不是無(wú)限的,就同一個(gè)網(wǎng)站,API的接口重要性肯定會(huì)比靜態(tài)文件重要性來(lái)的高,所以為了使系統(tǒng)更穩(wěn)定,感謝流控小姐姐使出這溫柔的一刀。


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