有时通信会出现错误:服务器可能因连接未授权或消息格式不正确而断开连接。有 2 个事件用于捕获错误。
每次 WebSocket 协议发生错误时触发此事件,例如无效的消息类型、无效的 utf8 字符串……
当 WriteData、WriteAndWaitData 或 Ping 因客户端未连接(对 WriteData 和 WriteAndWaitData 而言,或因为 WebSocket 握手尚未完成)而无法发送消息时,OnError 也会以 Connection = nil 触发。此时 Error 参数为 Data not sent, the client is not connected or its handshake has not completed. 不会向调用方引发异常,客户端也不会断开连接,因此在此事件中使用 Connection 之前,请务必先检查其是否为 nil。
procedure OnError(Connection: TsgcWSConnection; const Error: string);
begin
WriteLn('#error: ' + Error);
end;
每次发生异常时触发此事件,例如向未激活的套接字写入数据或访问不存在的对象。
procedure OnException(Connection: TsgcWSConnection; E: Exception);
begin
WriteLn('#exception: ' + E.Message);
end;
默认情况下,当连接被服务器关闭时,将触发异常。若不希望触发这些异常,请禁用 Options.RaiseDisconnectExceptions。
Options.RaiseDisconnectExceptions 还控制 OnError 对因客户端未连接而无法发送的消息的报告。将其设置为 False 可像早期版本一样静默丢弃这些消息。