您的位置:首页 > 理论基础 > 计算机网络

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

2006-03-13 09:56 309 查看
较之C++而言,.NET是一个更加“动态”的平台,其动态能力建立在反射机制之上,而反射的基础是“元数据”。

上文已经提到过,如果一个框架要为我们的应用做更多的事情,那么这个框架必须建立更多的标准,必须对框架自己要处理的消息有更多的了解,所以,每个消息都要是自描述的,也就是说每个消息要包含它自己的“元数据”。那么,“元数据”位于消息的何处了?你一定想到了,对,是消息头(MessagHeader)。
在ESFramework中,消息NetMessage由“消息头+主体”构成,并且消息头和主体都必须实现上文讲到的IContract接口。消息头既是本条NetMessage的元数据,其中包含了诸如消息长度、消息类型等描述信息。ESFramework为了能识别每个消息的元数据,必须再建立一个“标准”,这个标准便是IMessageHeader接口。为了简化后面的计算和应用,ESFramework要求所有的消息头的长度是固定的,比如都是64字节。注意,固定消息头的长度不是必须的,但是这会降低框架的复杂度。
我们来看看IMessageHeader中包含了些什么信息:
Message
public class Message
{
private IMessageHeader header ;
private IContract body ;

public Message(IMessageHeader theHeader ,IContract theBody)
{
//省略实现......
}

public NetMessage ToNetMessage()
{
//省略实现......
}

#region ToStream ,GetStreamLength
public int GetStreamLength()
{
//省略实现......
}

public byte[] ToStream()
{
//省略实现......
}

public void ToStream(byte[] buff, int offset)
{
//省略实现......
}
#endregion

#region Header ,Body ,MessageHelper
public IMessageHeader Header
{
//省略实现......
}

public IContract Body
{
//省略实现......
}
#endregion

}
可以看到,NetMessage已经是一个完全的面向对象的消息了。而至于主体到底含有什么具体的内容,还需要对主体IContract向下转换到具体的协议上才行。这通常是消息处理器的工作。

关于消息处理器和处理器工厂的介绍,请留意下篇文章。

ESFramework介绍之(3)――消息处理器和处理器工厂

上一篇:ESFramework介绍之(1)――网络通信消息协议接口IContract

转到 :ESFramework 可复用的通信框架(序)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: