ESFramework网络通信框架介绍之(1)――网络通信消息协议接口IContract

一.ESFramework网络通信框架与字节流   

    通过网络通信的系统之间(如客户端与服务端的通信)要想正常交互,它们必须有“共同的语言”,这种语言就是消息协议。遵守消息协议的消息才能被我们的系统所理解。
    我们知道,消息在网路上传输的是字节流,而我们主流的面向对象系统中处理的却是“对象”,如何将从网络上接收到的字节流转化为“对象”,又如何将“对象”转化为字节流以便通过网络传递给其他系统,这便是IContract接口定义的内容:
   

 1     /// <summary>
 2     /// IContract 用于抽象通信协议格式的基础接口。
 3     /// </summary>
 4     public interface IContract
 5     {
 6         void    FillMyself(byte[] data ,int offset) ; //将流解析为对象
 7         int      GetStreamLength() ;
 8 
 9         byte[] ToStream() ;              //将对象转化为流
10         void   ToStream(byte[] buff ,int offset);        
11     }    

    IContract接口中的各个成员的意思非常的清楚,含有offset参数的重载ToStream方法(第10行)可以将转化的结果流写到指定的buff中,这个方法是必须的,否则就会遇到很多需要拷贝缓冲区的操作,这将严重的损害运行的效率。

    很多朋友一定想到了,.NET中将对象转化为字节流或将流转化为对象的最方便的方式就是使用“序列化”,是的,如果各个通信的系统都是基于.NET平台创建的,当然没有问题,这种情况下,使用.NET Remoting可能会更好(使用Remoting可以完全省略对消息协议的关心,因为Remoting已经帮你打点好了一切)。但是更多的情况是,相互通信的系统是异构的。比如,服务端是.NET平台,而客户端却是PDA上C++写的程序,遇到这种情形,.NET的序列化、Remoting就无能为力了,我们必须自己手动打理一切。你也许会说,可以使用WebService?呵呵,好了,ESFramework网络通信框架主要关注的是构建基于Tcp或Udp网络系统,至于什么情况下,该使用WebService还是该直接在更低层的TCP/UDP上构建系统的问题,还是留待读者自己去思考吧:)


   
如果不能使用.NET的“序列化”,那么常用的是什么方法来完成“字节流《=》消息对象”的转换了,即IContract.FillMyself和IContract.ToStream的实现方式是什么?一个字节一个字节的处理。比如,我们消息协议中规定,接收到的字节流的前四个字节是一个使用UTF8编码的字符串“@@@@”,那么,我们解析时,就用UTF8来将接收到的前4个字节解析为字符串“@@@@”。接下来的4个字节是一个整数,那么你可以使用BitConverter类来将这四个字节解析为一个整数,......如此,一直将所有字节流解析完毕,生成一个完整的“消息对象”。至于字节流中的第几个字节放什么内容,那是你的构建应用时必须定义好的--消息协议。所有的消息协议都实现IContract接口。在此基础之上,应用系统才可以在不了解协议内部细节的情况下,对所有的消息进行统一的处理(这就是“多态”的应用啊),如此才有可能实现系统运行中动态加载功能插件的能力。

  二.ESFramework网络通信框架与 IContract接口

   ESFramework网络通信框架,它不关注你具体应用中的具体消息协议,它只关注IContract接口,这样ESFramework网络通信框架才可以在不同的应用中复用。如果要使ESFramework框架帮助我们构建应用时更加容易,ESFramework就需要把我们应用中更多共性提取出来,那么它必须“标准化”更多的东西,IContract只是其中的一个。接下来的文章中你会看到NetMessage的引入,系统之间通过网络交互的消息都可以表示成NetMessage,并且NetMessage游走于系统内部的各处理器、钩子Hook之间,正是由于这种前后一致性,使得NetMessage成为ESFramework的核心要素之一,关于NetMessage的具体介绍请留意下篇文章:
    ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 

 

时间: 2024-10-27 19:08:44

ESFramework网络通信框架介绍之(1)――网络通信消息协议接口IContract的相关文章

ESFramework网络通信框架介绍之(2)――网络通信消息NetMessage

ESFramework网络通信框架与元数据 较之C++而言,.NET是一个更加"动态"的平台,其动态能力建立在反射机制之上,而反射的基础是"元数据".     上文已经提到过,如果一个框架要为我们的应用做更多的事情,那么这个框架必须建立更多的标准,必须对框架自己要处理的消息有更多的了解,所以,每个消息都要是自描述的,也就是说每个消息要包含它自己的"元数据".那么,"元数据"位于消息的何处了?你一定想到了,对,是消息头(Mess

ESFramework网络通信框架介绍之(3)――消息处理器和处理器工厂

一.ESFramework网络通信框架与消息处理器   无论是服务端还是客户端,都需要对接收到的消息进行处理,在ESFramework网络通信框架中,处理消息的组件称为消息处理器,所有的消息处理器都实现了接口IDataDealer:    1     public interface IDataDealer2     {        3         NetMessage  DealRequestMessage(NetMessage reqMsg) ;        4     }    

ESFramework网络通信框架介绍之(5)――消息分派器IMessageDispatcher

  从2004年7月开始,就一直从事N层C/S架构的服务端的开发,时至今日,慢慢的积累了一些开发经验,ESFramework网络通信框架体系便是这些经验的总结.ESFramework网络通信框架这是一套完全可复用的.灵活的.单纯的.支持N层C/S架构的网络通信框架,内置了对Tcp和Udp协议的支持.ESFramework网络通信框架不仅仅提供了一个基础的C/S框架和大量C/S应用中常用的组件,而且在ESFramework网络通信框架框架之上,引入的一个扩展层--ESFramework网络通信框架

ESFramework ——成熟的C#网络通信框架(跨平台)

ESFramework网络通信框架是一套性能卓越.稳定可靠.强大易用的跨平台通信框架.也是.net平台首屈一指的成熟的C#网络通信框架.从最初的单纯的C#网络通信框架,历经10年,已经发展为支持包括安卓.IOS.Xamarin等多个平台的跨平台通信框架.其支持应用服务器集群.其内置了消息的收发与自定义处理(支持同步/异步模型).消息广播.P2P通道.文件传送(支持断点续传).心跳检测.断线重连.登录验证.在线用户管理.好友与群组管理.性能诊断等功能.基于ESFramework,您可以方便快捷地开

网络通信应用开发利器!—— ESPlus —— ESFramework通信框架的增强库

概述 ESPlus 是基于网络通信框架ESFramework通信框架通信框架的增强库.为了更贴近实际应用,加快网络通信系统的开发,ESPlus在ESFramework通信框架原生功能的基础上,进行了再次封装,提供了大多数通信系统中经常用到的组件和功能.在这些功能中,最主要的是:自定义信息.基础API与状态通知.文件传送.P2P框架.好友关系.组关系.Rapid引擎.  1.自定义信息 使用通信框架最基础的需求就是收发信息,ESPlus底层已经为我们封装好了所有与信息收发相关的操作,我们只要调用I

ESFramework网络通信框架 4.0 性能测试

  本实验用于测试ESFramework网络通信框架服务端引擎的性能,测试程序使用ESFramework 4.0版本. 一.准备工作 测试的机器总共有3台,都是普通的PC,一台作为服务器,两台作为客户端. 作为服务器是PC配置如下: 操作系统:Windows Server 2003 Enterprise Edition SP2 CPU:Pentium Dual-Core CPU E5400 @ 2.70GHz 内存:2G   二.测试策略        本实验所采用的策略是这样的: (1)每个客

《Ceph源码分析》——第3章,第1节Ceph网络通信框架

第3章Ceph网络通信本章介绍Ceph网络通信模块,这是客户端和服务器通信的底层模块,用来在客户端和服务器之间接收和发送请求.其实现功能比较清晰,是一个相对较独立的模块,理解起来比较容易,所以首先介绍它. 3.1 Ceph网络通信框架一个分布式存储系统需要一个稳定的底层网络通信模块,用于各节点之间的互联互通.对于一个网络通信系统,要求如下:高性能.性能评价的两个指标:带宽和延迟.稳定可靠.数据不丢包,在网络中断时,实现重连等异常处理.网络通信模块的实现在源代码src/msg的目录下,其首先定义了

ESFramework 通信框架安全机制的设计与实现

      在分布式通信系统中,安全无疑是非常重要的.ESFramework通信框架提供了哪些安全保障了?由于ESFramework通信框架是应用层的开发框架,那么本文我们只讨论ESFramework通信框架在应用层涉及到的安全问题.如果黑客是在网络层或链路层进行攻击,位于应用层的系统是无能为力的.从应用层来说,安全的重要性主要体现在以下几个方面:(1) 防止恶意用户使用格式不正确的消息来试探服务端.(2) 防止通信的消息被恶意用户截获,或者,即使被恶意用户截获,也无法破解其内容.(3) 防止恶

可靠通信的保障 —— 使用ACK机制发送自定义信息——ESFramework 通信框架4.0 快速上手(12)

      (本文所介绍的新功能位于2011.04.18发布的最新版本中,此次版本变更请参见ESFramework通信框架通信框架 4.0 版本升级说明(持续更新))       使用ESPlus.Application.CustomizeInfo.Passive.ICustomizeInfoOutter接口的Send方法,我们已经可以给服务端或其它在线客户端发送自定义信息了,那么,如何得知接收方是否已经收到了我们发出的信息了呢?特别是针对一些非常重要的信息,确认对方已经收到是非常重要的.ICu