第二人生的源码分析(三十四)读取通讯的消息模板
2008-04-11 23:21
330 查看
在开发通讯的软件里,要让通讯的两端程序相互对话,其实就跟人与人的交流是一样的,要使用共同语言,而不能一个人说英语,一个人说汉语。由于通讯两端是分别在不同的程序里,那么就需要定出一套相互认同的语言—协议定义。而定义协议的办法有很多种,比如直接写成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)。
通过这样的消息结构定义,就可以创建相应的协议结构,并且很灵活,添加协议也很方便,实在是太棒的协议定义了。
// 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)。
通过这样的消息结构定义,就可以创建相应的协议结构,并且很灵活,添加协议也很方便,实在是太棒的协议定义了。
相关文章推荐
- 第二人生的源码分析(三十四)读取通讯的消息模板
- 第二人生的源码分析(三十四)读取通讯的消息模板
- 蔡军生先生第二人生的源码分析(三十四)读取通讯的消息模板
- 消息中间件 activeMQ的源码分析 之 TCP通讯机制
- 蔡军生先生第二人生的源码分析(三十五)分析消息模板文件
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- 第二人生的源码分析(三十五)分析消息模板文件
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- 第二人生的源码分析(三十五)分析消息模板文件
- 消息中间件 activeMQ的源码分析 之 TCP通讯机制
- 第二人生的源码分析(二十三)人物行走的键盘消息处理
- 第二人生的源码分析(三十五)分析消息模板文件
- Android IPC 通讯机制源码分析
- Android 消息处理源码分析(2)
- dubbo源码分析2——SPI机制中的SPI实现类的读取和预处理
- PHPCMS2008源码模板原理分析 PHPCMS20008二次开发
- Android IPC 通讯机制源码分析 一
- Spring对注解(Annotation)处理源码分析1——扫描和读取Bean定义
- ActiveMQ源码分析(三):聊聊broker到broker的通讯
- nginx源码分析--请求体的读取(2)