处理注册之后,收到注册请求的服务器将在客户机打开的 TCP 连接上发送 SC_REPLY 消息。服务器将关闭连接。客户机必须保持 TCP 连接为打开状态,直到接收到来自服务器的 SC_REPLY 消息。
例如,客户机将执行以下操作:
打开服务器 TCP 连接
等候连接进入“可写入”状态
发送 SC_CALLBACK_REG 消息(其中包含 ADD_CLIENT 消息)
等待来自服务器的 SC_REPLY 消息
收到来自服务器的 SC_REPLY 消息
接收服务器已关闭连接(从套接字读取 0 字节)的指示
关闭连接
稍后,客户机将执行以下操作:
打开服务器 TCP 连接
等候连接进入“可写入”状态
发送 SC_CALLBACK_REG 消息(其中包含 REMOVE_CLIENT 消息)
等待来自服务器的 SC_REPLY 消息
收到来自服务器的 SC_REPLY 消息
接收服务器已关闭连接(从套接字读取 0 字节)的指示
关闭连接
服务器每次接收到来自客户机的 SC_CALLBACK_REG 消息时,都会通过同一个打开的连接发送一条 SC_REPLY 消息。此消息用于指明该操作是否成功。SC_REPLY XML DTD 包含 SC_REPLY 消息的 XML 文档类型定义,以及此消息可以包括的可能错误消息。
SC_REPLY 消息用于指定操作是成功还是失败。此消息包含 CRNP 消息的版本、状态码和状态消息(其中详细介绍了状态码)。下表描述了状态码可能具有的值。
状态码 |
说明 |
---|---|
OK |
已成功处理消息。 |
RETRY |
由于瞬态错误,客户机的注册已被服务器拒绝。客户机应当使用其他参数重新尝试注册。 |
LOW_RESOURCE |
群集资源不足,并且客户机只能稍后重新尝试。群集的群集管理员也可以增加群集中的资源。 |
SYSTEM_ERROR |
发生严重问题。请与群集的群集管理员联系。 |
FAIL |
授权失败,或者其他问题导致注册失败。 |
MALFORMED |
XML 请求的格式不正确,无法进行分析。 |
INVALID |
XML 请求无效,即 XML 请求不符合 XML 规范。 |
VERSION_TOO_HIGH |
消息的版本过高,无法成功处理该消息。 |
VERSION_TOO_LOW |
消息的版本太低,无法成功处理该消息。 |
在通常情况下,发送 SC_CALLBACK_REG 消息的客户机将收到指明注册是成功还是失败的回复。
但是,服务器可能会在客户机进行注册时遇到错误状态,该错误状态禁止服务器向客户机发送 SC_REPLY 消息。在这种情况下,注册可能已经在发生错误之前成功完成,也可能已经失败,还可能尚未进行。
由于服务器必须在群集中起故障转移或具有高可用性的服务器的作用,因此,这种错误状态并不意味着服务的结束。实际上,服务器可以很快开始向新注册的客户机发送事件。
要摆脱这些状态,客户机应执行以下操作:
在等待 SC_REPLY 消息的注册连接上强加应用级超时值,超出此超时值后客户机必须重新尝试注册。
在注册事件回调之前,开始在其回调 IP 地址和端口号上侦听事件传送。客户机应当同时等候注册确认消息和事件传送。如果客户机在接收到确认消息之前就开始接收事件,客户机将静默关闭注册连接。