在开发通讯的软件里,要让通讯的两端程序相互对话,其实就跟人与人的交流是一样的,要使用共同语言,而不能一个人说英语,一个人说汉语。由于通讯两端是分别在不同的程序里,那么就需要定出一套相互认同的语言—协议定义。而定义协议的办法有很多种,比如直接写成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)。
通过这样的消息结构定义,就可以创建相应的协议结构,并且很灵活,添加协议也很方便,实在是太棒的协议定义了。