您的位置:首页 > 其它

蔡军生先生第二人生的源码分析(三十四)读取通讯的消息模板

2008-05-17 15:27 417 查看
在开发通讯的软件里,要让通讯的两端程序相互对话,其实就跟人与人的交流是一样的,要使用共同语言,而不能一个人说英语,一个人说汉语。由于通讯两端是分别在不同的程序里,那么就需要定出一套相互认同的语言—协议定义。而定义协议的办法有很多种,比如直接写成C结构,这样的方式最直接了,但它有点不灵活。又有采用XML的方式,这样虽然灵活了,但它的通讯消息大小又太大了,不便于传送,对于中国慢慢网络来说,又太不现实。像QQ那么短的消息结构,发送的速度那么快才是真正地适应中国的国情,而不像MSN那么慢,那么费带宽,可以从这点来说MSN比QQ就差了十万八千里。因此,一个协议的好与坏,影响到通讯的根本性能,就影响到用户的使用感受,这也是我至今不太喜欢使用MSN的原因,也怪不了广东省委书记都喜欢使用QQ了(汪洋在腾讯公司总部接受了腾讯CEO马化腾赠送的QQ号码。消息传开后,有网友戏称为“QQ广东第一号”,更多网友纷纷表示“欢迎新Q友”。)。而第二人生使用的协议,比较高明,使用可定制的消息格式,直接使用二进制的方式。下面先来看看定义消息的文件message_template.msg:
// Linden Lab development message templates

version 2.0

// The Version 2.0 template requires preservation of message
// numbers. Each message must be numbered relative to the
// other messages of that type. The current highest number
// for each type is listed below:
// Low: 423
// Medium: 18
// High: 29
// PLEASE UPDATE THIS WHEN YOU ADD A NEW MESSAGE!


// *************************************************************************
// Test Message
// *************************************************************************

// Test Message

{
TestMessage Low 1 NotTrusted Zerocoded
{
TestBlock1 Single
{ Test1 U32 }
}
{
NeighborBlock Multiple 4
{ Test0 U32 }
{ Test1 U32 }
{ Test2 U32 }
}
}

从文件里看到第一行,就是消息的版本。接着看到Test Message的结构,它有一个大括号定义的消息结构。TestMessage是消息的名称,Low是这个消息使用频率程度,NotTrusted是这个消息是需要可靠性传送,Zerocoded是这个消息的编码方式。TestBlock1是消息块名称,Single是单一块的。Test1是发送的内容,32位大小。
NeighborBlock是第二块数据名称,多个定义,共有4块(Test0,Test1,Test2)。

通过这样的消息结构定义,就可以创建相应的协议结构,并且很灵活,添加协议也很方便,实在是太棒的协议定义了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐