zoukankan      html  css  js  c++  java
  • 网络开发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

  • 相关阅读:
    实现类莫名的错误解决
    xml文件不识别dubbo标签,添加支持的方法
    不要粗心马虎,不然你要付出几倍的精力纠错
    redis 缓存功能摘要
    spring的maven工程(服务层和表现层分离)配置浅析
    暂时放弃dubbo
    Maven工程的JDK版本配置
    spring的SOA聚合工程应用框架的搭建
    阿里云用宝塔面板安装JDK、zookeeper、dubbo
    maven项目不能正常运行
  • 原文地址:https://www.cnblogs.com/marryZhan/p/2213956.html
Copyright © 2011-2022 走看看