摘要:
http协议 网络通信领域,协议是指通信双方约定的规则,彼此按照规则交互,才能理解对方。http是超文本传输协议,之所以需要这样一个规则,是因为现实世界中,C/S请求应答模式的应用占据绝大部分,如果每一种服务都定义自己的格式,世界就会开始变的混乱了,每个人在开发服务器的时候都需要开发对应的客户端,而这个工作显然是不必要的。而为什么选择http而不是其他的规则呢,因为其简单、无状态,能满足应用需求... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(235)
评论(0)
推荐(0)
摘要:
线程池服务模型是single thread 与 request per thread两种模型的折中方案,其在实现时通常需要借助任务队列,主线程往任务队列尾添加任务,线程池中的服务线程不断从任务队列头取任务并服务,如下图所示: 对于主线程和服务线程来说,任务队列是临界资源,需要加锁进行保护。主线程往任务队列添加任务时需要加锁,服务线程从任务队列取任务也许加锁,当服务线程发现任... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(162)
评论(0)
推荐(0)
摘要:
网络服务器的实现不外乎两种情况,一是为某个业务单端开发服务器,二是实现通用网络服务器框架,前者的设计可能很大程度的受业务需求的影响,而后者则要保证简单易用,稳定服务,最好还有不错的性能。 服务器框架的优势在于让使用者快速的进行开发,只需要做很少的事情即可完成服务器的开发。在整个服务模型中,只有对请求任务的处理是预先不可知的,其他的逻辑基本上是固定的,故在实现框架时,将实际的处理部分以回调的形... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(164)
评论(0)
推荐(0)
摘要:
多线程在网络编程中作用重大,由于创建/销毁线程、线程间通信的开销小,目前很多网络服务器都是用多线程(线程池)的模式对外提供服务。linux上开发多线程程序多使用pthread库,本文主要讨论使用C++封装pthread库时可能出现的问题。 封装pthread库主要有两种思路,第一种是简单的封装接口,如下所示: class simple_thread_t {
public:
int star... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(195)
评论(0)
推荐(0)
摘要:
循环read(write) 在网络应用程序中,通常需要重复的调用read/write来读取到指定数量的数据,如下例: int wrapper_read(int fd, char *buf, int
size) { int ridx = 0; int rlen = 0; while(ridx <
size) { rlen = read(fd, buf + ridx, size
– ri... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(278)
评论(0)
推荐(0)
摘要:
fuse-based文件系统一个请求(以getattr为例)经历的路径,附件为visio版原图:fuse流程图.rar 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(293)
评论(0)
推荐(0)
摘要:
VISIO原图:rpc流程图.rar 管理员在2009年8月13日编辑了该文章文章。 --> --> 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(123)
评论(0)
推荐(0)
摘要:
linux提供了select、poll、epoll接口来实现IO复用,三者的原型如下所示,本文从参数、实现、性能等方面对三者进行对比。 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
int poll(struct pollfd *fds,... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(173)
评论(0)
推荐(0)
摘要:
关于listen的backup参数
listen的第二个参数,在网上有各种版本的解释,有人说是三次握手成功等待被accept的请求队列长度,有人说是尚未成功建立连接的队列长度,有人说是二者队列长度之和。 #man listen # man tcp 从man手册可以发现:从linux 2.2开始,backlog是指已经建立连接等待被accept的队列长度,而未成功建立连接的队列长度由tc... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(203)
评论(0)
推荐(0)
摘要:
关于hash函数 hash函数主要用于将“大范围”映射到“小范围”,如MD5将任意长度的数据计算出128bit的签名值,RSHash等函数将任意长度的数据转换成32bit的无符号整型,好的hash函数拥有高性能以及低hash冲突。 hash函数主要通过加减乘除及移位等操作来计算最终结果,hash函数的分类参考: http://nicoleamanda.blog.163.com/blog/... 阅读全文
posted @ 2013-04-19 14:12
ydzhang
阅读(272)
评论(0)
推荐(0)
浙公网安备 33010602011771号