

@startuml

title 内网穿透

actor 访客

package "客户端"{



    node "Netty客户端" {
        component [客户端当前通道]{
            [客户端心跳通道]
           component [客户端代理通信通道]{
                    [客户端通信通道读数据]
                    [客户端通信通道返回数据]
            }
        }


'        [客户端当前通道] <...right... [客户端真实代理通道]: 返回真实服务请求结果
'        [客户端当前通道] ...right..> [客户端真实代理通道]: 转发二进制请求到真实服务通道
    }
        node “客户端真实服务”{
           component [客户端需要代理的真实服务A]{
                  [客户端真实通道读数据]
                  [客户端真实通道返回数据]
           }
        }

'    [客户端真实代理通道] ...right...> [客户端真实服务]: 发送真实二进制请求到真实服务

}
package "服务端"{
    node "Netty服务端" {

        component [Netty服务端通道] {
            component [服务端心跳通道]{

            }
            component [服务端代理通信通道]{
                [服务端通信通道读数据]
                [服务端通信通道返回数据]
            }
        }

        component [Netty服务端绑定访客端口] {
            component [服务端访客真实通道]{
                [服务端访客真实通道读数据]
                [服务端访客真实通道返回数据]
            }
        }

    }

}



    [服务端心跳通道] <----> [客户端心跳通道]:长连接channel


    [访客] ..> [服务端访客真实通道读数据]: 访客访问数据
    [服务端访客真实通道读数据] ...> [服务端通信通道读数据]: 服务端访客数据转发到通信通道
    [服务端通信通道读数据] ..down..> [客户端通信通道读数据]: 服务端通信将数据转发到客户端通信通道
    [客户端通信通道读数据] ..down..> [客户端真实通道读数据]: 客户端通信通道将数据转发道客户端端真实代理通道
    [客户端真实通道读数据] ..left..> [客户端真实通道返回数据]: 处理数据。。。
    [客户端真实通道返回数据] ..up..> [客户端通信通道返回数据]: 客户端真实服务返回数据
    [客户端通信通道返回数据] ..up..> [服务端通信通道返回数据]: 将客户端返回的数据发送给访客真实通道
    [服务端通信通道返回数据] ..up..> [服务端访客真实通道返回数据]: 返回数据




@enduml