# wsock.tcp.jsonClient 库模块帮助文档

## wsock.tcp 成员列表 <a id="wsock.tcp" href="#wsock.tcp">&#x23;</a>

### wsock.tcp.jsonClient <a id="wsock.tcp.jsonClient" href="#wsock.tcp.jsonClient">&#x23;</a>
JSON-RPC 2.0 客户端  
aardio 输出的请求 JSON 不包含换行并以换行符'  
'结束。  
服务器应答 JSON 对象的 id 字段必须与请求 id 一致，  
在批量请求时应答数组应当包含 id 一致的对象（不需要返回空数组）  
[关于 JSON-RPC 2.0](http://www.jsonrpc.org/specification)

### wsock.tcp.jsonClient() <a id="wsock.tcp.jsonClient" href="#wsock.tcp.jsonClient">&#x23;</a>
[返回对象:wsockRpcJsonClientObject](#wsockRpcJsonClientObject)

### wsock.tcp.jsonClient(主机,端口) <a id="wsock.tcp.jsonClient" href="#wsock.tcp.jsonClient">&#x23;</a>
创建REST客户端  
也可以在第一个参数中使用冒号分隔主机与端口

### wsock.tcp.jsonClient(主机,端口,连接超时毫秒) <a id="wsock.tcp.jsonClient" href="#wsock.tcp.jsonClient">&#x23;</a>
可选用第 3 个参数限制连接等待；此值不改变 RPC 响应超时。

## wsockRpcJsonClientObject 成员列表 <a id="wsockRpcJsonClientObject" href="#wsockRpcJsonClientObject">&#x23;</a>

### wsockRpcJsonClientObject.* <a id="wsockRpcJsonClientObject.any" href="#wsockRpcJsonClientObject.any">&#x23;</a>
远程对象名或远程方法名字。  
远程函数调用成功则第一个返回值为表对象，  
└── 该对象的 result 字段为返回值，error 为错误对象，两个字段不会同时存在。  
└── error 对象的 message 为错误信息，code 为错误代码，data 为错误附加数据。  
└── 如果存在 error 对象，则第 2 个返回值为 error 对象的 JSON 文本格式。  
调用失败第一个返回值为 null ，第二个返回值为错误信息  

如果调用 rpc.beginTrans 函数开始一个批量调用，  
则返回一个可以指定 end 成员函数的对象，服务器应答时自动回调此 end 函数  

[返回对象:wsockRpcJsonClientObject](#wsockRpcJsonClientObject)

### wsockRpcJsonClientObject.process <a id="wsockRpcJsonClientObject.process" href="#wsockRpcJsonClientObject.process">&#x23;</a>
如果使用 process.rpc.tcpJsonClient 创建对象，  
则此属性为 process.popen 对象，否则为空。  

[返回对象:processPopenObject](https://www.aardio.com/zh-cn/docs/library-reference/process/popen.html#processPopenObject)

## wsockRpcJsonClientObject.rpc 成员列表 <a id="wsockRpcJsonClientObject.rpc" href="#wsockRpcJsonClientObject.rpc">&#x23;</a>

RPC本地客户端对象  
所以本地函数放在这个对象里面  
用户不得添加、删除、修改此对象的任何成员

### wsockRpcJsonClientObject.rpc.beforeRequest(请求数据) <a id="wsockRpcJsonClientObject.rpc.beforeRequest" href="#wsockRpcJsonClientObject.rpc.beforeRequest">&#x23;</a>

```aardio
wsockRpcJsonClientObject.rpc.beforeRequest = function(reqData){
	/*此回调事件在发送请求前触发  
reqData.params是即将发送的参数*/
	return reqData;
}
```

### wsockRpcJsonClientObject.rpc.beginTrans() <a id="wsockRpcJsonClientObject.rpc.beginTrans" href="#wsockRpcJsonClientObject.rpc.beginTrans">&#x23;</a>
开始批量调用  
批量调用时单次调用的返回值是一个表  
可对返回值指定end成员函数，  
end函数会在commitTrans提交批量调用成功后被触发

### wsockRpcJsonClientObject.rpc.charset <a id="wsockRpcJsonClientObject.rpc.charset" href="#wsockRpcJsonClientObject.rpc.charset">&#x23;</a>
获取或修改编码,默认为"UTF-8",  
因为 JSON 规定了 Unicode 编码方案，所以不建议也不应该修改这个值  

如果指定为除"UTF-8"之外的值，则按本机默认代码页转换服务端编码

### wsockRpcJsonClientObject.rpc.client <a id="wsockRpcJsonClientObject.rpc.client" href="#wsockRpcJsonClientObject.rpc.client">&#x23;</a>
用于执行请求的 wsock.tcp.client 对象  

[返回对象:tcpclientObject](https://www.aardio.com/zh-cn/docs/library-reference/wsock/tcp/client.html#tcpclientObject)

### wsockRpcJsonClientObject.rpc.close() <a id="wsockRpcJsonClientObject.rpc.close" href="#wsockRpcJsonClientObject.rpc.close">&#x23;</a>
关闭RPC客户端并释放资源

### wsockRpcJsonClientObject.rpc.commitTrans() <a id="wsockRpcJsonClientObject.rpc.commitTrans" href="#wsockRpcJsonClientObject.rpc.commitTrans">&#x23;</a>
完成批量调用

### wsockRpcJsonClientObject.rpc.lastDelivery <a id="wsockRpcJsonClientObject.rpc.lastDelivery" href="#wsockRpcJsonClientObject.rpc.lastDelivery">&#x23;</a>
最近请求状态：not_sent / unknown / responded。超时不表示操作被取消，应回读真实状态，不能盲目重放。

### wsockRpcJsonClientObject.rpc.lastResponse() <a id="wsockRpcJsonClientObject.rpc.lastResponse" href="#wsockRpcJsonClientObject.rpc.lastResponse">&#x23;</a>
获取最后一次服务器返回的原始数据,  
如果控制台已打开或在开发环境中导入console库则在控制台输出数据  
下载文件时该值为空

### wsockRpcJsonClientObject.rpc.lastStatusCode <a id="wsockRpcJsonClientObject.rpc.lastStatusCode" href="#wsockRpcJsonClientObject.rpc.lastStatusCode">&#x23;</a>
获取最近一次请求返回的HTTP状态码  
100 ~ 101 为信息提示  
200 ~ 206 表示请求成功  
300 ~ 305 表示重定向  
400 ~ 415 表求客户端请求出错  
500 ~ 505 表示服务端错误

### wsockRpcJsonClientObject.rpc.lastStatusMessage() <a id="wsockRpcJsonClientObject.rpc.lastStatusMessage" href="#wsockRpcJsonClientObject.rpc.lastStatusMessage">&#x23;</a>
获取最近返回的HTTP状态码文本描述  
第二个返回值为状态码

### wsockRpcJsonClientObject.rpc.notify("函数名",参数) <a id="wsockRpcJsonClientObject.rpc.notify" href="#wsockRpcJsonClientObject.rpc.notify">&#x23;</a>
发送通知,服务器不返回值,  
如果 varargs 属性指定为 true 时将不定个数参数合为数组，  
varargs 为 false 时直接发送参数  

成功返回 true，失败返回 null,错误信息

### wsockRpcJsonClientObject.rpc.rollbackTrans() <a id="wsockRpcJsonClientObject.rpc.rollbackTrans" href="#wsockRpcJsonClientObject.rpc.rollbackTrans">&#x23;</a>
撤消尚未提交的批量调用

### wsockRpcJsonClientObject.rpc.setAuth("用户名","密码") <a id="wsockRpcJsonClientObject.rpc.setAuth" href="#wsockRpcJsonClientObject.rpc.setAuth">&#x23;</a>
设置HTTP登录用户名,密码

### wsockRpcJsonClientObject.rpc.setStrictMode(timeoutMs=30000) <a id="wsockRpcJsonClientObject.rpc.setStrictMode" href="#wsockRpcJsonClientObject.rpc.setStrictMode">&#x23;</a>
启用严格 NDJSON 模式：完整 LF 帧、独立递增 ID、严格响应关联与有界等待，不自动重发。  
服务端每个 JSON 响应必须占一行且以 LF 结束。同一客户端不支持并发/重入调用。

### wsockRpcJsonClientObject.rpc.timeoutMs <a id="wsockRpcJsonClientObject.rpc.timeoutMs" href="#wsockRpcJsonClientObject.rpc.timeoutMs">&#x23;</a>
严格模式等待响应的超时毫秒数，默认 30000，必须为正数。

### wsockRpcJsonClientObject.rpc.varargs <a id="wsockRpcJsonClientObject.rpc.varargs" href="#wsockRpcJsonClientObject.rpc.varargs">&#x23;</a>
默认值为 true,  
值为 true 时将不定个数的参数放入数组发送给服务端  
值为false时直接将单个参数发送给服务端  

JSON-RPC 2.0 一个会制造混乱的地方：  
如果 params 是一个数组，并没有规定是展开为一个参数，还是作为一个数组参数。  

目前aardio的RPC服务端会负责展开数组作为多个参数，  
但客户端需要在这里手动设置

### wsockRpcJsonClientObject.rpc.version <a id="wsockRpcJsonClientObject.rpc.version" href="#wsockRpcJsonClientObject.rpc.version">&#x23;</a>
值为 JSON-RPC 协议版本："2.0"  
不应该修改这个值

### wsockRpcJsonClientObject.rpc.xcall("函数名",参数) <a id="wsockRpcJsonClientObject.rpc.xcall" href="#wsockRpcJsonClientObject.rpc.xcall">&#x23;</a>
调用远程函数。  
如果 varargs 属性指定为 true 时将不定个数参数合为数组，  
varargs 为 false 时直接发送参数  

远程函数调用成功则第一个返回值为表对象，  
└── 该对象的 result 字段为返回值，error 为错误对象，两个字段不会同时存在。  
└── error 对象的 message 为错误信息，code 为错误代码，data 为错误附加数据。  
└── 如果存在 error 对象，则第 2 个返回值为 error 对象的 JSON 文本格式。  
调用失败第一个返回值为 null ，第二个返回值为错误信息  

如果调用 rpc.beginTrans 函数开始一个批量调用，  
则返回一个可以指定 end 成员函数的对象，服务器应答时自动回调此 end 函数
