#架构#重新设计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代理代码框架相关推荐
- 猜谜游戏、彩云词典爬虫、SOCKS5代理的 Go(Golang) 小实践,附带全代码解释
猜谜游戏在编程语言实践都已经和 HelloWord 程序成为必不可少的新手实践环节,毕竟,它能够让我们基本熟悉 for 循环.变量定义.打印.if else 语句等等的使用,当我们基本熟悉该语言基础之 ...
- 实战:150行Go实现高性能socks5代理
光说不练假把式,不如上手试试,这篇来写个有点卵用的东西. - TCP Server - 用 Go 实现一个 TCP Server 实在是太简单了,什么 c10k problem.select.poll ...
- golang 使用 http socks5 代理
目录 第一种方法: HTTP(S)代理 第二种方法: Socket5代理 第一种方法: HTTP(S)代理 代码实现如下: package mainimport ("fmt"&qu ...
- 穿透Socks5 代理的UDP编程
网络编程中,对于数据传输实时性要求较高的场合,大家都会选择UDP来作为数据传输协议,在TCP/IP协议族中UDP协议较TCP协议需要的网络系统资源更少.然而在企业应用中,由于网络安全原因等会导致除了特 ...
- 白色flash模块代码_适用于MCU项目的代码框架BabyOS,工程师的好助手!
来源:码云+嵌入式云IOT技术圈 一个好的代码架构直接影响项目的质量,今天为大家分享的是一个管理功能模块和外设驱动的框架:BabyOS. BabyOS是什么? BabyOS适用于MCU项目,它是一套管 ...
- 十年 IT 老兵带你通过案例学架构,附C#代码
技术大会上的分享大多高大上,亿级流量.超大型研发团队,虽然值得借鉴,但由于应用场景与研发资源的差异,一般企业并不容易落地.其实,中小型研发团队在IT行业还是占大多数,他们在技术架构方面的问题较多,技术 ...
- 前端架构设计1:代码核心
现在的前端领域, 随着JS框架, UI框架和各种库的丰富, 前端架构也变得十分的重要. 如果一个大型项目没有合理的前端架构设计, 那么前端代码可能因为不同的开发人员随意的引入各种库和UI框架, 导致代 ...
- ASoC Platform驱动代码框架图
原址 [前言] 在更深入地阅读了工程中 Audio 部分的驱动代码之后,整理出了一个 ASoC Platform 驱动代码的框架图.类似的 ASoC Machine驱动代码框架图在<ASoC M ...
- ASoC Machine驱动代码框架图
原址 [前言] 较久之前写了一篇<Linux ASoC音频驱动架构 及 Machine驱动代码分析>,那个时候刚开始接触 ALSA,文章写得很粗糙.这段时间以来新看了 HAL层.Frame ...
最新文章
- 用REDIS实现分布式缓存
- 第二次Soring冲刺计划第二天(个人)
- 怎么理解python语言_Python语言入门1-理解Python语言
- 天玑720支持鸿蒙系统吗,天玑720属于骁龙多少 天玑720处理器相当于骁龙几
- Binary classification - 聊聊评价指标的那些事儿【回忆篇】
- C 库函数 - pow()
- python3 os.system 异步执行_《sentos python教程》 Python os.system(command),这样执行的command命令,和主程序是异步的吗?...
- 在xcode中用oc实现计算器
- linux系统源码文档,Linux操作系统源代码详细分析
- Windows Server 2008安装nodejs
- 三角函数和角与差角公式的图形解释
- 浏览器打开页面的几种方式
- Description: Field smsClient in com.atguigu.gmall.pms.service.impl.SpuServiceImpl required a bean o
- 十大重要IT公司排名 -2009
- 项目二 管理与维护Linux系统
- yuque-hexo:语雀写文,自动部署 Hexo 博客
- c#进行excel编辑
- 支付宝沙箱开启以及配置
- 正则表达式 语法详解
- artemis服务_集成Artemis