网络编程学习

1) 64-bit系统的地址空间足够大,不会出现没有足够的连续空间这种情况,不用担心内存碎片问题,再说服务器不是7*24运行的。Linux Kernel也大量用到了动态内存分配。既然操作系统内核都不怕动态分配内存造成碎片,应用程序为什么要害怕?

2)现在的内存分配器(malloc及其第三方实现)今非昔比,除了memcached这种纯以内存为卖点的程序需要自己设计分配器之外,其他网络程序大可使用系统自带的malloc或者某个第三方实现。 之前说的使用内存池主要有几个考虑,那么现在的内存碎片和效率问题就不再是问题,也就是剩下了一个唯一的好处,避免malloc遍布整个项目,从而导致的内存泄露等问题。

3)连接的关闭:服务端主动关闭连接的缺点之一是会多占用服务器资源。服务端主动关闭连接之后会进入TIME_WAIT状态,在一段时间之内hold住一些内核资源。如果并发访问量很高,这会影响服务端的处理能力。这似乎暗示我们应该把协议设计为客户端主动关闭,让TIME_WAIT状态分散到多台客户机器上,化整为零。 这又有另外的问题:客户端赖着不走怎么办?会不会造成拒绝服务攻击?或许有一个二者结合的方案:客户端在收到响应之后就应该主动关闭,这样把 TIME_WAIT 留在客户端。服务端有一个定时器,如果客户端若干秒钟之内没有主动断开,就踢掉它。这样善意的客户端会把TIME_WAIT留给自己,buggy的客户端会把 TIME_WAIT留给服务端。或者干脆使用长连接协议,这样避免频繁创建销毁连接。 

4)TCP网络编程有三个例子最值得学习研究,分别是echo、chat、proxy,都是长连接协议。 

5)TCP传输也会出错,这里说的“出错”指的是收到的数据与发送的数据不一致,而不是数据不可达。在应用层协议最好加上自己的checksum。


参考:http://blog.csdn.net/Solstice/article/details/6527585

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值