网络开发cheatsheet


基础网络框架:
c: libevent, lighttpd, nginx.
C++: ACE, boost aio, POCO.IOCP
Java: MINA, Grizzly, Tomcat, Resin.

基于 IDL 的RPC:
ICE, facebook thrift

语言特定的动态RPC:
Hessian(caucho的一个协议,其提供了基于HTTP的实现, 后来偶实现了一个基于TCP的版本).

公司内部也有很多网络框架:
无线的gnp, 架构部的MCP...
不过公司内部的网络框架封装就比较简单一些,体现出的设计精髓不是很多,实用性,专一性强一点.



示范分析
MINA

这里挑一个设计比较清晰,使用比较简易的框架  MINA 来show一下其设计:

Acceptor --> [IoFilter ---> IoFilter ---> ... -> IoFilter] --->Iohandler
                 ^                   ^                  ^                               ^
                  |                    |                    |                                 |
                 注入executor (提供单线程/多线程执行环境), SEDA

Acceptor感知协议(TCPAcceptor, UDPAcceptor),可透明替换.
IoFilter过滤链接收数据:进行阀值控制,权限验证, 流量统计 和 消息完整性识别
IoHandler在完整消息达到后,被回调 onMessage(Buffer &buf);

Connector一样的套路,提供多态的构造,可以传入Socket或SocketPool类型.


MINA的设计优点在于封装恰到好处, 对网络程序的整个生命周期每个环节提供了适当的接口:
1. 把执行环境(单/多线程)做成扩展点.
2. 网络协议的封装: Acceptor具体实现可灵活选择各种策略(TCP, UDP...).
3. 数据处理被分解为 过滤 和 处理.
  过滤环节: 可以自由组织各种数据拦截处理部件.对于消息解编部分还提供了基于状态机模
    式的高 级封装.便于定制私有协议.
  请求处理环节: IoHandler不感知具体网络协议,便于移植,也可独立作单元测试.

Thrift
作为一个RPC框架, thrift的设计相较其它(如ICE), 要更清晰简洁明了.
thrift中3个组件: Transport, Protocol, Processor 定义的非常到位,分别封装了
  网络层(TCP, UDP, HTTP), 协议层(Binary, JSON, Text), 和请求处理器.

其中, 网络层和协议层提供了基本的实现,当然,也可以按需自行扩展自定义的实现.
对于Processor层,是提供应用逻辑实现的地方. 所以一个一般的网络程序,采用thrift来实现, 只需要关注业务层面Processor部分的实现. 对于网络处理机制(同步阻塞处理, 异步事件驱动)等, 通过组件搭配即可.



网络程序的开发的一些关键点
首先,你要真正理解: 同步, 异步, 阻塞, 非阻塞 的概念, 记得,是要真正理解.
(注: 关于网络程序设计,偶曾经写过一篇文章<<NIO 设计,开发实践>>发表于<<程序员>> 2008.02期.有过详细描述.)

对于小量,海量连接的管理,从连接管理,超时管理到请求处理等环节, 套路不尽相同.

连接管理:
少量连接: map什么的查找表都可.
海量连接: 可以作fd数组的优化

超时管理:
少量连接: 周期性迭代遍历整个连接.
海量连接: 可以按照一定的超时时间刻度对 连接 进行分组,以超时时间刻度作为查找表的key, 连接分组作为value进行保存, 这样每一轮超时淘汰只需根据当前时间换算成超时时间刻度对 查找表进行一次查找, 即可批量删除超时连接.




网络处理相关设计模式


服务访问和配置模式:
Service Configuration

事件处理模式:
反应器(Reactor)
主动器(Proactor), 通常要配合aio.
Asynchronous Completion Token(ACT)
Acceptor/Collector

同步模式:
阶段锁
策略锁
线程安全接口
双阶段加锁优化

并发模式:
主动对象
Monitor Object
Half-sync/half-async
Leader/follower
Thread-specific Storage

原文地址:https://www.cnblogs.com/marryZhan/p/2213956.html