ESFramework介绍之(32)―― Tcp客户端核心组件关系图

简介: 如果你的客户端基于ESFramework构建,并使用Tcp与服务端通信。通过这篇文章你将知道如何迅速、高效地创建客户端应用。    ESFramework对基于Tcp客户端的支持主要在ESFramework.Network.Tcp.Passive命名空间,下图给出了该命名空间中的核心组件,以及这些组件之间的关系:    下面解释一下这些组件的作用、职责。
    如果你的客户端基于ESFramework构建,并使用Tcp与服务端通信。通过这篇文章你将知道如何迅速、高效地创建客户端应用。

    ESFramework对基于Tcp客户端的支持主要在ESFramework.Network.Tcp.Passive命名空间,下图给出了该命名空间中的核心组件,以及这些组件之间的关系:

    下面解释一下这些组件的作用、职责。我们从最底层的通信组件NetworkStream向上看:
(1)NetworkStream 即是System.Net.Sockets.NetworkStream类,在ESFramework中,它是最底层的通信组件。

(2)ITcpAutoSender组件,它主要实现了数据的自动发送和数据优先级。关于ITcpAutoSender的更多信息,可以参见ESFramework介绍之(16)―― Tcp数据自动发送器ITcpAutoSender

(3)ITcpPassive组件,这个组件类似于服务端的ITcp组件,所有应用的网络数据的进出都必须经过它。ITcpPassive 封装了数据接收线程,完全向客户端隐藏了网络通信细节。ITcpPassive构建在ITcpAutoSender之上,所有的数据发送都委托给ITcpAutoSender。而数据的接收仍然是直接使用NetworkStream 。

(4)ITcpServerAgent组件,它使得使用基于消息请求/回复的与服务器的交互就像本地方法调用一样。关于它的详细介绍,请参见ESFramework介绍之(7)-- 服务器代理IServerAgent 。

(5)HookList,即INetMessageHook链,这个我们在介绍服务端时已经见过很多了。ESFramework对于客户端提供了Hook的支持,但是没有提供对Spy的支持,这是因为绝大多数情况下,我们的客户端并不需要Spy消息。(关于Hook与Spy的区别,可以参见ESFramework介绍之(30)―― 消息侦察者 INetMessageSpy

(6)IDataDealerFactory组件,处理器工厂,可以直接使用ESFramework.Network.Passive.EsbPassiveDealerFactory组件。

(7)EsbPassiveDataDealer组件,如果你的应用在ITcpServerAgent组件的层次上创建,那么就可以直接使用 EsbPassiveDataDealer来处理所有的来自服务端的数据。EsbPassiveDataDealer将所有来自服务器的数据分为如下几类:
    public   enum  PassiveMessageType
    {
        Response ,
        Ack ,
        P2PMessage ,
        Notify 
// 服务器给的通知
    }
    其中,P2PMessage和Notify都是SingleMessage。服务器发过来的一个消息,如果没有请求与之对应,则称之为单身消息SingleMessage。EsbPassiveDataDealer将所有的SingleMessage交给ISingleMessageDealer组件处理,而将所有的回复消息或ACK消息放到IResponseManager(基于此,才可实现ITcpServerAgent的主要目的)。


(8)ISingleMessageDealer组件,用于处理所有的SingleMessage,如P2PMessage和Notify。


    通常,你的应用可以在两个层次上创建,ITcpPassive层次和ITcpServerAgent层次。
    我推荐在ITcpServerAgent层次上创建应用,这样你可以省去很多麻烦,充分发挥ESFramework框架的能力。而且,你会得到这些好处:
(1)回复消息与请求消息的自动匹配。如果应用构建于ITcpPassive层次,则你必须在应用中自己来将回复与请求一一对应起来。
(2)像调用本地方法一样与服务器进行交互。所有与服务器的交互都通过ITcpServerAgent.CommitRequest方法进行,如果需要回复消息,则回复消息直接通过ITcpServerAgent.CommitRequest方法的返回值获得。
(3) 使得客户端业务功能可以以插件形式实现。这主要也是得力于ITcpServerAgent,它使得网络变得透明,并且将异步的消息请求/回复转变成同步。在插件内部,可以直接使用ITcpServerAgent与服务端交互来同步获取服务结果。关于客户插件IPassiveAddin的更多信息,可以参见 ESFramework介绍之(8)-- 客户端插件IPassiveAddin
(4)你仅仅需要实现ISingleMessageDealer接口来处理服务端发过来的P2PMessage和Notify,而不必创建额外的处理器来处理Response和Ack消息。


转到  : ESFramework 可复用的通信框架(序) 




目录
相关文章
|
网络协议
海思3559万能平台搭建:TCP客户端网口编程
海思3559万能平台搭建:TCP客户端网口编程
118 0
|
网络协议 Java
Java BIO tcp服务端向客户端消息群发代码教程实战
java BIO tcp服务端向客户端消息群发代码教程实战
124 0
Java BIO tcp服务端向客户端消息群发代码教程实战
|
缓存 网络协议 Java
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
257 0
在项目中使用Curator的Java 客户端搭建后进行长TCP连接和TCP权限配置【Zookeeper】
|
网络协议
TCP编程中的客户端与服务端的通信实现
TCP编程中的客户端与服务端的通信实现
107 0
|
网络协议 安全 网络架构
Tcp 客户端 | 学习笔记
快速学习 Tcp 客户端
164 0
Tcp 客户端 | 学习笔记
|
网络协议 C++
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
412 0
C++网络通信实例(TCP/IP协议,包括服务端与客户端通信)
|
网络协议
TCP客户端与服务端
Socket(简称:套接字)是进程之间通信的一个工具,好比现实中的插座,所有的家用电器要想工作都是基于插座进行,进程之间想要进行网络通信需要基于这个socket,负责进程之间的网络数据传输,好比数据的搬运工
234 0
TCP客户端与服务端
|
网络协议 图形学
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
493 0
Unity【Socket TCP】- 服务端与客户端通讯的简单示例
|
网络协议
客户端与服务端--(基于TCP/IP的群聊系统的设计与实现)
接上期 *Swing组件组合使用--登录界面源码(仿QQ)*,这期分享客户端与服务端源码
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端