
网络编程
文章平均质量分 59
yanook
把握生命里的每一分钟,全力以赴心中的梦!
展开
-
使用事件驱动模型实现高效稳定的网络服务器程序
转载自: http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/index.html?ca=drs- 前言 事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传转载 2012-01-05 13:42:19 · 360 阅读 · 0 评论 -
利用类的继承对pthread封装
多线程在网络编程中作用重大,由于创建/销毁线程、线程间通信的开销小,目前很多网络服务器都是用多线程(线程池)的模式对外提供服务。linux上开发多线程程序多使用pthread库,本文主要讨论使用C++封装pthread库时可能出现的问题。 封装pthread库主要有两种思路,第一种是简单的封装接口,如下所示: class simple_thread_t { public:转载 2012-09-09 13:49:33 · 913 阅读 · 0 评论 -
Reactor和Proactor
昨天购买了《程序员》杂志 2007.4期,第一时间去翻阅了一遍,其中有一篇《两种高性能I/O设计模式的比较》令人眼睛一亮,这是一篇译文,偶最近在一直想认真看看这方面的文章很久了。 文章主要是讲到了系统I/O方式可分为阻塞,非阻塞同步和非阻塞异步三类,三种方式中,非阻塞异步模式的扩展性和性能最好。主要是讲了两种IO多路复用模式:Reactor和Proactor,并对它们进行了比较。 文章还介绍了转载 2012-08-18 22:07:06 · 439 阅读 · 0 评论 -
无堵塞的并发编程
顺序编程非常普及,可以说是大多数程序员编程范式,只不过可能他们没有意识到,如今已经进入并发编程时代,顺序编程和并发编程是两种完全不同的编程思路,堵塞Block是顺序编程的家常便饭,常常隐含在顺序过程式编程中难以发现,最后,成为杀死系统的罪魁祸首;但是在并发编程中,堵塞却成为一个目标非常暴露的敌人,堵塞成为并发不可调和绝对一号公敌。 因为无堵塞所以快,这已经成为并发的一个基本特征。转载 2012-08-08 20:30:38 · 359 阅读 · 0 评论 -
通信协议之序列化
通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。 编码规范就是我们通常所说的编解码,序列化。不光是用在通信工作上,在存储工作上我们也经常用到。如我们经常想把内存转载 2012-07-24 20:34:42 · 1122 阅读 · 1 评论 -
TCP 协议的各种参数设置
由于发送该数据会清空发送缓冲,所以要加上PUSH标志。(告诉接收者:所有数据已发送,马上送到应用层去。)这里所说的数据包括与此PUSH包一起传输的数据以及之前就为该进程传输过来的数据 设置PUSH标志:如果待发送的数据会清空发送缓存,那么栈就会自动为此包设置PUSH标志 正在看《tcp/ip详解》 8个wrtie,每个写1024的数据,每个都会加上push标志,原因是这么说的转载 2012-05-16 13:42:28 · 1589 阅读 · 0 评论 -
多线程server应注意问题
先看一段代码,观察这段代码可能存在什么问题: #include "unpthread.h" static void *doit(void *); /* each thread executes this function */ int main(int argc, char **argv) { int listenfd, connfd; pthread_t ti原创 2012-02-03 17:09:02 · 674 阅读 · 0 评论 -
慢系统调用函数如何处理中断信号EINTR
我们用慢系统调用来描述那些可能永远堵塞的系统调用(函数调用),如:accept,read等。永远堵塞的系统调用是指调用有可能永远无法返回,多数网络支持函数都属于这一类。例如,如果没有客户连接到服务器上,则服务器对accept的调用就没有返回保证。类似的,如果客户从未发送过一行要求服务器回射的文本,则服务器对read的调用将永不返回。其他慢系统调用的例子是对管道和终端设备的读写。有一个例外,就是磁盘原创 2012-02-01 16:28:48 · 1957 阅读 · 0 评论 -
TCP NAT穿透技术
一直以来,说起NAT穿透,很多人都会被告知使用UDP打孔这个技术,基本上没有人会告诉你如何使用TCP协议去穿透(甚至有的人会直接告诉你TCP协议是无法实现穿透的)。但是,众所周知的是,UDP是一个无连接的数据报协议,使用它就必须自己维护收发数据包的完整性,这常常会大大增加程序的复杂度,而且一些程序由于某些原因,必须使用TCP协议,这样就常常令一些开发TCP网络程序的人员“谈穿透色变”。那么,使用T转载 2012-01-14 13:43:32 · 2157 阅读 · 4 评论 -
TCP_NODELAY和TCP_CORK
Nagle算法 TCP_NODELAY和TCP_CORK Nagle算法 根据创建者John Nagle命名。该算法用于对缓冲区内的一定数量的消息进行自动连接。该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用 程序系统的效率。Nagle算法,由Ford Aerospace And Communications Corporation Congestion Cont转载 2012-01-14 14:37:17 · 857 阅读 · 0 评论 -
TCP_DEFER_ACCEPT
1. 设置TCP_DEFER_ACCEPT int val = 10; // time_out if (setsockopt(sock_descriptor, IPPROTO_TCP, TCP_DEFER_ACCEPT, &val, sizeof(val))== -1) {perror("setsockopt"); exit(1);} 2. TCP_DEFER_ACCEPT的效果 正常的原创 2012-01-15 13:52:33 · 1587 阅读 · 0 评论 -
TCP连接:SYN ACK RST UTG PSH FIN
TCP的三次握手是怎么进行的:发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。之后,一个TCP连接建立,开转载 2012-09-11 13:03:39 · 516 阅读 · 0 评论