SLP协议的扩展与改进
来源:互联网 发布:淘宝客服打字速度要求 编辑:程序博客网 时间:2024/05/16 09:22
SLP 虽然功能强大,但也有很多不足之处。本文就服务标示符,服务抽象和事件模拟三个方面来改进 SLP 的弱点,并在和原有协议兼容的情况下对协议进行扩展,增强其功能。
服务标示符
UDDI 中使用 uuid 来唯一标示服务实体,类似的,SSDP 中用 usn 来唯一标示服务,但是在 SLP 中并没有这么一个属性。在某些场合中,我们可能想要知道两个属性不同的服务是来自两个不同的服务提供者还是一个服务提供者改变了它的属性,这时,有一个唯一服务标示符就会方便很多。
虽然 SLP 本身没有提供对于唯一服务标示符的支持,我们可以很容易自己构造一个,一个简单的方法是在服务中增加一个标示符属性,但是一个服务在属性的使用上是没有任何限制的,我们并不能保证服务提供者一定会提供这个属性。这时,我们可以利用 SLP 扩展消息来达到这个目的。SLP 扩展消息是由 SLP 协议定义的附在 SLP 标准消息之后的消息。其内容格式由通信双方事先约定,协议并不作要求。我们可以定义一种扩展消息,内容为一个属性列表,表示 SA 在服务中必须提供列表中的属性。当 SA 向 DA 注册时,DA 检查 SA 的属性,如果没有要求的属性,就可以在回复确认消息时附加这个扩展消息,当 SA 收到这则消息时,它就不得不在自己的属性中增加该属性并重新向 DA 注册。这样,我们就可以保证在 DA 中注册的服务都有指定的属性,当然可以包括唯一标示符属性。在没有 DA 的情况下,UA 可以在服务请求中把唯一标示符作为查询条件的一部分,这样虽然不能迫使 SA 添加这项属性,但是也能确保在网络中使用到的服务都有自己的唯一标示符。
这条扩展消息的格式参考如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Extension ID = 0x8000 | Next Extension Offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Offset, contd.| Required Attribute List Length| Attribute List/
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
根据 SLP 协议规范,扩展消息 ID 从 0x0000--0x7FFF 为标准扩展消息,0x8000--0x8FFF 为私有扩展,剩下的编号保留。因此这里使用 0x8000 编号作为 ID。后面 24bits 为下一个扩展消息的偏移量,由于 SLP 标准消息后面可以跟多个扩展消息,因此需要该字段来标示下一个扩展在什么地方开始,如果该扩展为最后一条扩展消息,则这项为 0。协议规定,ID 字段和下一个扩展偏移量必须为扩展消息的前两项,后面才是扩展的自定义内容。接下来一项是必要属性列表长度,用于定位随后的属性列表。在这个列表中的所有属性即该 SA 必须提供的属性,列表中的属性只有属性名字,不需要提供值。
由于 SA 在向 DA 注册时通常会注册自己所有的属性,因此当 SA 收到上述扩展时,它自己难以处理这个问题,可以在 SA 端返回一个错误。这时需要人工添加必要的属性后再次向 DA 注册。再次说明,该扩展消息的使用只能保证 SA 的服务有唯一标示符,但是并不能给服务提供唯一标示符。
下面是一个使用这条扩展的示例,其中没有指明的字段值可以是任意合法的字段,假设要求的唯一标示符名字叫 uuid:
- SA 向 DA 发送注册消息
Function-ID : 3 (SrvReg,标准注册消息 )
Attr-list: (attr1=12),(attr2=abc)
- DA 发现没有 uuid,回复 SA
Function-ID: 5 (SrvAck,标准注册回复消息 )
Error Code: 3 (INVALID_REGISTRATION,协议定义的标准错误 )
Extension-ID: 0x8000
Required attribute list length: 4
Attribute list: uuid
- SA 再次注册,加上 uuid 属性
Function-ID : 3
Attr-list: (attr1=12),(attr2=abc),(uuid=347a45cc24f65a4d)
- DA 确认
Function-ID: 5
Error Code: 0
本文转自IBM Developerworks中国
请点击此处查看全文
- SLP协议的扩展与改进
- LP 系列第 2 部分:协议的扩展与改进
- SLA与SLP
- Swift的protocol与协议扩展
- 微软的SLP软件加密保护服务
- SLP的基本介绍和对比分析
- 协议代码改进的步骤
- 对协议的扩展
- 使用、扩展、改进与推广,用实例讲述如何在工作中提高自己的技术水平
- Ymodem 协议 改进的CAN—Ymodem协议
- 问题的解决与改进
- CppUnit的缺陷与改进
- DFA的缺点与改进
- CppUnit的缺陷与改进
- CppUnit的缺陷与改进
- CppUnit的缺陷与改进
- 程序的完善与改进
- Objective-C语言:协议、类别与扩展
- 寻深圳WINCE/WM PPC/SYBIAM 软件开发外包/联合项目开发
- ORACLE备份&恢复案例之四(精品)
- 会计啊!成本啊!
- javax.servlet.Filter 的过滤器的使用
- 使用 HttpClient 和 HtmlParser 实现简易爬虫
- SLP协议的扩展与改进
- 卷的挂载过程
- XForm 表单对函数和事件处理功能的支持
- freebsd 7 pkg_add -r kde 4
- Welcome
- Updatedata()不能针对某个控件单独使用
- 函数调用规范__cdecl和__stdcall的区别
- 通过引用传递数组
- 黑客书架上出现频率最高的书