Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

服务器如何对客户机进行应答

处理登记后,服务器将发送 SC_REPLY 消息。 服务器将通过从其上接收登记请求的那台客户机上打开的 TCP 连接发送此消息, 然后关闭连接。 客户机必须保持 TCP 连接为打开状态,直到接收到来自服务器的 SC_REPLY 消息。

例如,客户机将执行以下操作:

  1. 打开服务器 TCP 连接

  2. 等候连接进入“可写入”状态

  3. 发送 SC_CALLBACK_REG 消息(其中包含 ADD_CLIENT 消息)

  4. 等候 SC_REPLY 消息

  5. 接收 SC_REPLY 消息

  6. 接收服务器已关闭连接(从套接字读取 0 字节)的指示

  7. 关闭连接

客户机稍后将执行以下操作:
  1. 打开服务器 TCP 连接

  2. 等候连接进入“可写入”状态

  3. 发送 SC_CALLBACK_REG 消息(其中包含 REMOVE_CLIENT 消息)

  4. 等候 SC_REPLY 消息

  5. 接收 SC_REPLY 消息

  6. 接收服务器已关闭连接(从套接字读取 0 字节)的指示

  7. 关闭连接

服务器每次接收到来自客户机的 SC_CALLBACK_REG 消息时,都会通过同一个打开的连接发送一条 SC_REPLY 消息。 此消息用于指明该操作是否成功。 SC_REPLY XML DTD 包含 SC_REPLY 消息的 XML 文档类型定义,以及此消息可能包含的错误消息。

SC_REPLY 消息的内容

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 消息。 在这种情况下,登记可能已经在发生错误之前成功完成,也可能已经失败,还可能尚未进行。

由于服务器必须充当故障切换或高度可用的群集服务器,所以此错误状态并不意味着服务的结束。 实际上,服务器可以很快开始向新登记的客户机发送事件。

要改正这些状态,客户机应当: