日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

#架构#重新设计socks5代理代码框架

發布時間:2025/5/22 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 #架构#重新设计socks5代理代码框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前寫過socks5代理,具體請看這篇文章。

在寫任何代碼代碼之前,一直認為只有設計好了相應的數據結構,才能寫好好的算法和框架。從前面的代碼來看,對socks5協議的數據結構定義還算不錯,具有很好的可讀性。正如之前所說,前面版本太過于簡單,雖然是基于多線程,但是性能上并不是很好,因為我要對每一個請求臨時創建一個線程,我們都知道創建新線程,是需要額外的系統資源,假如有很多Request請求時,過多的開辟線程,可能導致資源耗盡而宕機。

再者,前面的版本沒有很好的處理TCP狀態,在linux下通過netstat狀態查看,有部分socket套接字處于CLOSE_WAIT狀態,其意思是在沒有數據發出時,服務器端沒有主動關閉Socket。

今天,重新設計了一下socks5服務器的框架。

主要設計思想如下:

維護三個隊列:Wait_Queue,Ready_Queue和Read_Queue,分別用于存儲剛接收到請求的套接字,用于Select函數處理的套接字和有數據到達的套接字;

線程A里,有一個循環,不斷地接受來自客戶端的請求,將產生的socket壓入Wait_Queue;

線程B里,也有一個循環,不斷地Select或epoll Ready_Queue里的套接字,然后將有數據可讀的套接字(看是否對方已經關閉)壓入Read_Queue;

線程組C里,可以利用多線程處理Read_Queue,線程組大小可以開設定,程序運行時就開辟相應的線程數量,這樣以后就不會為每個請求開辟線程了;

其中,線程B和線程組C是生產消費模型;即Read_Queue大小不為0時,線程組就會進行處理數據;當Read_Queue大小為0后,線程B又會從新更新Read_Queue的值。

要注意的是,這里涉及到很多數據同步的問題,所以需要用到Mutex,生產消費模型需要pthread_cond_t。

來,我們驗證這個框架的性能吧,敬請期待。

最后,我用python寫了一下這個框架,請看我的github?lab,后面還對這個框架進一步說明。

?

-----------------打造高質量的文章 更多關注 把酒泯恩仇---------------

為了打造高質量的文章,請贊一個吧。。。。謝謝了,我會寫更多的好文章的。

請關注sina微博:http://weibo.com/baiyang26

把酒泯恩仇官方博客:http://www.ibaiyang.org?【推薦用google reader訂閱】

把酒泯恩仇官方豆瓣:http://www.douban.com/people/baiyang26/

轉載于:https://www.cnblogs.com/ibaiyang/archive/2012/12/07/2807349.html

總結

以上是生活随笔為你收集整理的#架构#重新设计socks5代理代码框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。