美文网首页架构师成长记程序员
netty自定义协议(私有协议栈)

netty自定义协议(私有协议栈)

作者: landy8530 | 来源:发表于2017-10-03 18:04 被阅读255次

    此文参考Netty权威指南《私有协议栈开发》章节

    1.概述

    绝大多数的私有协议栈开发都是基于TCP/IP协议,所以Netty的NIO TCP协议栈可以非常方便的进行私有协议栈的定制和开发。
    自定义协议主要的步骤:
    定义自己的协议规则(可以参考rocketMQ中的remoting模块的自定义协议)
    自己编写encoder(编码器)和decoder(解码器)
    编写自己的应用服务(netty的client和server)

    自定义协议需要注意:
    TCP拆包粘包问题(不知道读取内容的长度等):netty中使用LengthFieldBasedFrameDecoder解决
    服务端卡死问题(一段时间没有接收到对方消息,则释放资源、清除客户端登录缓存等,等待服务器端重连)

    2.Netty协议功能设计

    2.1 Netty协议网络拓扑图

    在分布式环境下,每个netty节点之间建立长连接,使用netty协议进行通信。Netty节点并没用服务端和客户端之分,谁先发起请求,谁就是客户端,另一方就是服务端。

    image.png

    2.2. Netty自定义功能协议栈

    基于Netty的NIO通信框架,提供高性能的异步通信能力
    提供消息的编解码能力,可以实现消息实体的序列化和反序列化
    提供基于IP的白名单接入认证能力
    链路的有效性校验机制
    链路的断连重连机制

    2.3 通信交互图

    image.png

    Netty节点之间的通信过程如下:
    Netty客户端发送握手请求消息,并携带节点ID等有效身份认证信息
    Netty服务端对握手请求信息进行合法性校验,包括节点ID有消息,重复登录校验,IP地址合法性校验等,校验通过后,发送握手成功响应消息。
    链路建立成功后,客户端发送业务消息
    链路建立成功后,服务端发送心跳消息
    链路建立成功后,客户端发送心跳消息
    链路建立成功后,服务端发送业务消息
    服务端退出,关闭连接,客户端一段时间连接不上,也自动断开连接

    2.4消息定义

    Netty协议栈消息包括两部分:消息头和消息体,具体定义参见权威指南中相应章节

    2.5其他功能设计包括:

    netty协议支持的字段类型,编解码规范,链路的建立,链路的关闭,可靠性设计,安全性设计,可扩展性设计等

    3.Netty协议栈开发步骤:

    数据结构定义
    消息编解码
    握手和安全认证
    心跳检测机制
    断连重连

    具体代码参见github

    相关文章

      网友评论

        本文标题:netty自定义协议(私有协议栈)

        本文链接:https://www.haomeiwen.com/subject/ysefyxtx.html