处理登记后,服务器将发送 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 地址和端口上侦听事件传送。 客户机应当同时等候登记确认消息和事件传送。 如果客户机在接收到确认消息之前就开始接收事件,客户机将静默关闭登记连接。