自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李树花开,风中摇曳

吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。

  • 博客(14)
  • 资源 (13)
  • 收藏
  • 关注

原创 开始读redis的源码了

Redis是一个很简单的nosql类型的数据库,代码量相对来说是比较少的.但是代码风格确实比较漂亮.我打算花一段时间剖析一下它的代码,不光是看啦,看的话,收获是不大的.我打算从Redis那纷繁复杂,令人眼花缭乱的代码里剥出一个单机的数据库,能够运行的,但是没有那么多的错误处理代码,这样以来既可以学到作者的代码风格,也可以看到如何来实现一个数据库,同时还可以学习网络编程,确实是一举多得的

2016-11-24 15:54:03 10301 5

原创 一起来写ftp server 03 -- 加强版本

这一次的版本我们在第一版的基础上添加了一些有意思的东西,增强了我们的功能.下载限速和上传限速代码的实现里有一些很有意思的地方,下载限速和上传限速就是其中一例,这些东西听起来非常高大上,可是如果你真的做了的话,会发现这些东西真的也就是这样.限速的原理很简单,如果发现下载速度过快,那么我就休息一下,不下那么快,这样速度就降下来的.上传同理.SpeedBarrier/* 下载或者上传速度限制器 */cl

2016-11-15 22:42:38 945

原创 一起来写ftp server 02 -- 一次失败的尝试

上一个版本之中,最基本的功能已经实现了,但是可以明显地看得到, CmdHandle这个类过大,而DataHandle这个类又过小,所以,我想平衡一下,将CmdHandle这个类的数据传输部分分散至DataHandle这个类中,起先并没有想太多,只是想这么来干一下.这里需要注意一下的是,CmdHandle和DataHandle两个类的代码分别在两个进程中执行.不过,写着写着,我发现,这个想法是很愚蠢的

2016-11-15 21:59:35 947

原创 一起来写ftp server 01 -- 简易版本

一些坑,踩了就好了.写这个ftp server只是为了练一下手,写这种文章只是想记录一下我在编写这个ftp server的过程中的一些想法和收获.虽然编写这个玩意有点耗时,但是有一些坑,你不踩,你永远都不知道.我们应该用什么样的方式来实现我们的程序?这是一个老生长谈的问题,使用多线程,多进程还是别的什么方式?鉴于我们已经有了一个web server的经验,我们自然会想,可不可以采取多线程的方式来处

2016-11-15 21:27:58 3181

原创 一起来写web server 09 -- 最终版本

这次的代码是在前一次代码的基础上做一些点滴的修改.实现更好的封装,更漂亮的抽象.同时也是我们这个web server的最后一个版本了.这次的版本应该修改的幅度是最大的.EPOLLONESHOT 即使我们使用ET模式,一个socket上的某个事件还是可能被触发多次,这个并发程序中就会引起一个问题,比如说一个线程(或进程,下同)在读取完某个socket上的数据后开始处理这些数据,而在数据处理的过程中

2016-11-04 14:37:44 1239 1

原创 一起来写web server 08 -- 多线程+非阻塞IO+epoll

到了多线程,一些东西就变得耐人寻味了.这个版本是在前面单线程epoll的基础上引入了线程池,当然不是前面玩具一样的线程池,而是一个通用的组件,生产者消费者队列.生产者消费者队列生产者消费者问题是操作系统中一个很经典的同步互斥问题,已经有了很不错的解决方案,将它的解决方案拓展一下,就可以用于我们的实践啦.我自己写了一个生产者消费者的队列,然后发现muduo中已经内置了这种模型,而且使用起来比我写的更

2016-11-04 10:24:11 1144

原创 一起来写web server 07 -- 单线程非阻塞IO加强版本

这次的这个版本相对于前面的第6个版本有些许加强,那就是将epoll由LT模式变成了ET模式. 对于采用了LT工作模式的文件描述符,当epoll_wait检测到其上有事件发生并且将事件通知应用程序后,应用程序可以不立即处理该事件,这样,当应用程序下次调用epoll_wiat时,epoll_wait还会向应用程序通告此事件,直到该事件被处理.而对于采用ET工作模式的文件描述符,当epoll_wait

2016-11-04 09:24:46 866

原创 一起来写web server 06 -- 单线程非阻塞IO版本

阻塞IO的效率是在是低下,你如果要写高性能的web server的话,你必须使用非阻塞IO.非阻塞IO的读写在谈到非阻塞IO之前,必须先谈一谈阻塞IO,在网络编程中,我们假设有一个监听套接字的sockfd,这个sockfd是你调用了socket,listen, bind这一大票的函数得到的一个文件描述符.其实它默认就是阻塞的,具体的表现是:使用accept函数监听sockfd时,如果没有连接到来,

2016-11-04 08:44:04 2135 1

原创 一起来写web server 05 -- 多线程进阶版本

这个版本的web server比第4版稍微做了一点改进,那就是由主线程统一接收连接,然后连接的处理由子线程来完成.因此,这里就引入了条件变量以及同步互斥的问题.同步机制muduo库中有一个关于同步机制的封装,我这里就直接采用了.我这里来介绍一下这个封装吧.下面是Conditon这个类的代码:class Condition : noncopyable{ private: Mu

2016-11-04 01:22:23 667

原创 一起来写web server 04 -- 线程池版本

从这个版本开始,后面的代码差不多是越来越难啦.这个版本,我们主要是要实现一个线程池版本的web server.这个版本的设计出自UNP.思想思想非常简单,那就是父线程首先构建n多子线程,这些子线程全部争抢全局的一把锁,只有抢到了锁的线程才能够调用accept函数,否则都会阻塞掉.代码/*- * 线程池版本的web server.主要的思想是事先构建一个线程池,只是需要注意的是,accept的时候需

2016-11-04 00:33:34 939 1

原创 一起来写web server 03 -- 多线程版本

一起来写web server 03 – 多线程版本 错误的代码和正确的代码总是非常相似的!好吧,我们继续开干,这一次,我们来写一个多线程版本的web服务器.这次代码的思想十分简单,那就是一旦从客户端来了一个连接,就生成一个线程来处理这个连接.这种想法和之前的多进程版本非常类似.但是请注意进程和线程之间的差异.进程和线程的区别进程这种东西,一旦父进程调用fork函数,生成了一个子进程,那么子进程

2016-11-03 23:54:56 1169 1

原创 一起来写web server 02 -- 多进程版本

在UNP的第30章客户/服务器程序设计范式中提到了这种模型.主要的思想这种模型的思想非常简单,具体来说,就是,没当用户connect到来之后,立马fork一个子进程去处理连接,代码如下:int main(int argc, char *argv[]){ int listenfd = Open_listenfd(8080); /* 8080号端口监听 */ while (true) /

2016-11-03 23:21:30 1302

原创 一起来写web server 01 -- 单进程版本

csdn的markdown编辑器就是一个傻逼.web server的原理如果说,你仅仅是要实现一个简单的网页服务器,ok,这非常简单,用不了多少代码,因为它的原理实在是非常简单.客户端首先通过tcp/ip三次握手连接到服务器,然后向服务器发送http请求,这个请求大概长什么样子呢?我这里举一个栗子:GET /sample.jsp HTTP/1.1\r\nAccept: image/gif.ima

2016-11-03 12:52:22 1430 1

原创 一起来写web server 00 -- 准备工作

这篇文章是一个序言,我接下来想用9篇文章来记录一下我逐步迭代完成的这个不算漂亮的作品.server我早已经写完了,代码最后执行的效果如下图所示:上面的http://192.168.44.221:8080/代表的是一个内网地址,端口是8080,这代表这我们的web服务器工作在192.168.44.211这个地址所在的主机,监听于8080号端口.代码运行在ubuntu之上,对于

2016-11-03 00:28:13 1152

8021x相关资料.rar

8021x的相关资料,包括hostapd 0.0.1代码的阅读笔记,其实现的参考文档。

2019-07-14

django 1.11 官方说明文档.pdf 电子书

django的说明文档.

2017-07-18

python matplotlib库的官方文档.

python matplotlib库的官方文档,下载了顺便分享一下.

2017-03-10

如何设计程序(How to design programs)官网的答案以及英文原版教程

How to design programs -- An Introduction to Computing and Programming!从官网上抓取下来的网页,差不多整个www.htdp.org都抓取下来了,所以到这里共享给各位! 该书的中文译本是如何设计程序,很好的一本书。

2015-12-10

python Mysql参考手册

关于python的连接Mysql的官方参考文档,里面记录了应该如何使用api。

2015-11-29

openpyxl参考手册

官网上下载很慢,所以搬运到csdn上来了,既然看到了这里,你自然知道这东西是干嘛的了!

2015-11-27

跟我一起写makefile带书签

很详细地描述了如何书写makefile!不可多得的一份资料!

2015-11-06

如何使用secureCRT连接vmware中的虚拟主机?

自己可以看一下!是在没有什么好说的,就是sourceCRT连接主机的事情!

2015-09-29

VC++编程技术与难点剖析(辛长安,梅林)

VC++编程技术与难点剖析,很好的一份MFC参考资料,不适用与入门,适用于提升与进阶,带书签,如果真心想学号MFC的话,这份资料真是不可多得!

2015-04-26

GDI+ SDK参考 中文版 带书签

GDI+ SDK参考,自己制作了书签,使用GDI+绘图的同学可以参考一下,很好的一份资料!

2015-04-26

Advanced Archive Password Recovery Professional v4.54.48+注册码

archpr4.54带注册码!很好的一个破解winrar密码的工具!

2013-09-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除