处理注册后,服务器将发送 SC_REPLY 消息。服务器将通过从其上接收注册请求的那台客户机上打开的 TCP 连接发送此消息,然后关闭连接。客户机必须保持 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 规范)。 |
VERSION_TOO_HIGH |
消息的版本过高,无法成功处理该消息。 |
VERSION_TOO_LOW |
消息的版本太低,无法成功处理该消息。 |
正常情况下,发送 SC_CALLBACK_REG 消息的客户机将收到一个表明注册是否成功的应答。
但是,当客户机注册时,服务器可能正处于一种错误状态,从而使服务器无法向客户机发送 SC_REPLY 消息。在这种情况下,注册可能已经在发生错误之前成功完成,也可能已经失败,还可能尚未进行。
由于服务器必须充当故障转移或高度可用的群集服务器,所以此错误状态并不意味着服务的结束。实际上,服务器可以很快开始向新注册的客户机发送事件。
对正在等候 SC_REPLY 消息的注册连接强制执行一个应用程序级别的超时,随后客户机需要重试注册。
在注册事件回调之前,开始在其回调 IP 地址和端口上侦听事件传送。客户机应当同时等候注册确认消息和事件传送。如果客户机在接收到确认消息之前就开始接收事件,客户机将静默关闭注册连接。