# web.socket.jsonClient 库模块帮助文档

## WebSocketJsonClientObject 成员列表 <a id="WebSocketJsonClientObject" href="#WebSocketJsonClientObject">&#x23;</a>

### WebSocketJsonClientObject.* <a id="WebSocketJsonClientObject.any" href="#WebSocketJsonClientObject.any">&#x23;</a>
远程对象名或远程方法名字,  
作为函数调用时返回一个调用对象,  
通过指定返回调用对象的 end 属性定义调用结束回调函数,例如:  
ret.end=function(result,err){  

}  
回调参数 result 为调用返回值,err 为错误信息,  
如果调和成功,err参数为null  

[返回对象:WebSocketJsonClientObject](#WebSocketJsonClientObject)

### WebSocketJsonClientObject.done <a id="WebSocketJsonClientObject.done" href="#WebSocketJsonClientObject.done">&#x23;</a>
通过远程函数调用返回对象的 done 属性判断调用是否完成。  
注意出错时则 done 可能不会设为 true，应在 rpc.onError 回调中处理这种情况。

### WebSocketJsonClientObject.end <a id="WebSocketJsonClientObject.end" href="#WebSocketJsonClientObject.end">&#x23;</a>

```aardio
WebSocketJsonClientObject.end = function(result,err){
	/*可通过远程函数调用返回对象的 end 属性指定一个调用完成触发的回调函数。  
回调参数 result 为远程调用返回值,err 为错误对象,  
调用成功 err 参数为null*/
}
```

### WebSocketJsonClientObject.rpc <a id="WebSocketJsonClientObject.rpc" href="#WebSocketJsonClientObject.rpc">&#x23;</a>
WebSocket客户端对象  
此对象的成员谨慎改动  

[返回对象:websocketjsonClientrpcObject](#websocketjsonClientrpcObject)

## web.socket 成员列表 <a id="web.socket" href="#web.socket">&#x23;</a>

### web.socket.jsonClient <a id="web.socket.jsonClient" href="#web.socket.jsonClient">&#x23;</a>
WebSocket / JSON-RPC 2.0 单线程异步客户端

### web.socket.jsonClient() <a id="web.socket.jsonClient" href="#web.socket.jsonClient">&#x23;</a>
[返回对象:websocketjsonClientObject](#websocketjsonClientObject)

## websocketjsonClientObject 成员列表 <a id="websocketjsonClientObject" href="#websocketjsonClientObject">&#x23;</a>

### websocketjsonClientObject.* <a id="websocketjsonClientObject.any" href="#websocketjsonClientObject.any">&#x23;</a>
远程对象名或远程方法名字,  

[返回对象:WebSocketJsonClientObject](#WebSocketJsonClientObject)

### websocketjsonClientObject.connect("ws://") <a id="websocketjsonClientObject.connect" href="#websocketjsonClientObject.connect">&#x23;</a>
重新连接到WebSocket服务端  
参数指定WebSocket服务端网址，例如 "ws://localhost:7511"  
如果不指定参数,则获取上次调用此函数指定的网址参数,  
如果之前也没有指定网址则抛出异常

### websocketjsonClientObject.on("close",proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("close",function(e){  
	/*连接被关闭  
e.code为错误代码e.reason为错误原因*/  
})
```

### websocketjsonClientObject.on("error",proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("error",function(errMessage,rpcError){  
	/*发生错误,errMessage 为错误信息。  
如果服务端按 jsonrpc 协议返回 error 对象，  
则 rpcError 有值，包含 messge，code 字段。*/  
})
```

### websocketjsonClientObject.on("fragment",proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("fragment",function(msg){  
   /*收到分片数据  
第一个数据包使用msg.type指明类型,参考WebSocket协议规范  
后续数据包msg.type为0,最后一个数据包msg.fin为1  

如果不指定这个回调函数,则自动并接分片数据后触发onMessage事件*/	  
})
```

### websocketjsonClientObject.on("message",proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("message",function(msg){  
    /*收到服务端数据  
msg.type 为 1 时 msg.data 为文本,  
否则 msg.data 为字节串（buffer 类型）*/  
})
```

### websocketjsonClientObject.on("open",proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("open",function(){  
	/*已打开连接*/		  
}
```

### websocketjsonClientObject.on(method,proc) <a id="websocketjsonClientObject.on" href="#websocketjsonClientObject.on">&#x23;</a>

```aardio
websocketjsonClientObject.on("/*需要监听的Rpc通知事件名字*/",function(param){  

})
```

### websocketjsonClientObject.rpc <a id="websocketjsonClientObject.rpc" href="#websocketjsonClientObject.rpc">&#x23;</a>
WebSocket客户端对象  
此对象的成员谨慎改动  

[返回对象:websocketjsonClientrpcObject](#websocketjsonClientrpcObject)

## websocketjsonClientrpcObject 成员列表 <a id="websocketjsonClientrpcObject" href="#websocketjsonClientrpcObject">&#x23;</a>

### websocketjsonClientrpcObject.afterJsonStringify <a id="websocketjsonClientrpcObject.afterJsonStringify" href="#websocketjsonClientrpcObject.afterJsonStringify">&#x23;</a>

```aardio
websocketjsonClientrpcObject.afterJsonStringify = function(jsonData){
    /*可以在这里加密客户端JSON,返回null中止本次调用*/
	return jsonData;
}
```

### websocketjsonClientrpcObject.beforeJsonParse <a id="websocketjsonClientrpcObject.beforeJsonParse" href="#websocketjsonClientrpcObject.beforeJsonParse">&#x23;</a>

```aardio
websocketjsonClientrpcObject.beforeJsonParse = function(jsonData){
    /*可以在这里解密服务端数据,返回null中止本次调用*/
	return jsonData;
}
```

### websocketjsonClientrpcObject.beforeRequest(请求数据) <a id="websocketjsonClientrpcObject.beforeRequest" href="#websocketjsonClientrpcObject.beforeRequest">&#x23;</a>

```aardio
websocketjsonClientrpcObject.beforeRequest = function(reqData){
	/*此回调事件在发送请求前触发  
reqData.params是即将发送的参数*/
	return reqData;
}
```

### websocketjsonClientrpcObject.beginTrans() <a id="websocketjsonClientrpcObject.beginTrans" href="#websocketjsonClientrpcObject.beginTrans">&#x23;</a>
开始批量调用  
之后的所有RPC调用不提交服务器,  
直到调用commitTrans函数

### websocketjsonClientrpcObject.close() <a id="websocketjsonClientrpcObject.close" href="#websocketjsonClientrpcObject.close">&#x23;</a>
关闭连接  
可选增加2个参数指定发送给服务器的关闭帧附加数据:  
参数@1为数值类型的错误代码,参数@2为字符串类型错误描述

### websocketjsonClientrpcObject.commitTrans() <a id="websocketjsonClientrpcObject.commitTrans" href="#websocketjsonClientrpcObject.commitTrans">&#x23;</a>
完成批量调用并提交到服务器

### websocketjsonClientrpcObject.connect("ws://") <a id="websocketjsonClientrpcObject.connect" href="#websocketjsonClientrpcObject.connect">&#x23;</a>
重新连接到WebSocket服务端  
参数指定WebSocket服务端网址，例如 "ws://localhost:7511"  
如果不指定参数,则获取上次调用此函数指定的网址参数,  
如果之前也没有指定网址则抛出异常

### websocketjsonClientrpcObject.headers <a id="websocketjsonClientrpcObject.headers" href="#websocketjsonClientrpcObject.headers">&#x23;</a>
其他HTTP请求头  
值可以是文本或数组、或键值对组成的表  
请求时会调用 web.joinHeaders()函数拼接并转换HTTP头  
该函数支持的类型和格式这个属性都可以支持

### websocketjsonClientrpcObject.heartbeatData <a id="websocketjsonClientrpcObject.heartbeatData" href="#websocketjsonClientrpcObject.heartbeatData">&#x23;</a>
单向心跳发送的数据,默认为空数据  
这个值修改以后，只能在下次调用connect函数才会生效

### websocketjsonClientrpcObject.heartbeatInterval <a id="websocketjsonClientrpcObject.heartbeatInterval" href="#websocketjsonClientrpcObject.heartbeatInterval">&#x23;</a>
客户端主动发送心跳间隔,默认为30秒,  
设为-1时禁用客户端心跳,注意某些服务端收到心跳包会报错,这时建议关掉心跳,  
此属性值修改以后，只能在下次调用connect函数才会生效

### websocketjsonClientrpcObject.heartbeatType <a id="websocketjsonClientrpcObject.heartbeatType" href="#websocketjsonClientrpcObject.heartbeatType">&#x23;</a>
单向心跳发送的的帧类型,  
默认为0xA,也就是单向心跳 Pong 帧  
这个值修改以后，只能在下次调用connect函数才会生效

### websocketjsonClientrpcObject.isClosed() <a id="websocketjsonClientrpcObject.isClosed" href="#websocketjsonClientrpcObject.isClosed">&#x23;</a>
套接字是否已关闭

### websocketjsonClientrpcObject.isConnected() <a id="websocketjsonClientrpcObject.isConnected" href="#websocketjsonClientrpcObject.isConnected">&#x23;</a>
套接字是否已连接并准备就绪(已与服务器握手成功)

### websocketjsonClientrpcObject.originUrl <a id="websocketjsonClientrpcObject.originUrl" href="#websocketjsonClientrpcObject.originUrl">&#x23;</a>
浏览器启动WebSocket客户端的网址  
一些WebSocket服务器根据这个判断是不是允许连接,  
所以有时候设置这个很重要  
默认使用WebSocket网址，并把 前面的ws://改为http://

### websocketjsonClientrpcObject.protocol <a id="websocketjsonClientrpcObject.protocol" href="#websocketjsonClientrpcObject.protocol">&#x23;</a>
应用程序支持的协议列表,默认为"chat"

### websocketjsonClientrpcObject.readyState <a id="websocketjsonClientrpcObject.readyState" href="#websocketjsonClientrpcObject.readyState">&#x23;</a>
连接状态,  
0为等待连接,1为已连接并准备就绪,2为正在关闭,3为已关闭  
只有成功通过WebSocket协议握手以后readyState才会被置为1  
这与socket.readyState连接成功就会置为1是不同的

### websocketjsonClientrpcObject.responseHeaders <a id="websocketjsonClientrpcObject.responseHeaders" href="#websocketjsonClientrpcObject.responseHeaders">&#x23;</a>
服务端响应的HTTP头  
这是一个表对象，键名都已转为小写

### websocketjsonClientrpcObject.rollbackTrans() <a id="websocketjsonClientrpcObject.rollbackTrans" href="#websocketjsonClientrpcObject.rollbackTrans">&#x23;</a>
撤消尚未提交的批量调用

### websocketjsonClientrpcObject.socket <a id="websocketjsonClientrpcObject.socket" href="#websocketjsonClientrpcObject.socket">&#x23;</a>
异步套接字对象  
在关闭连接状态下此属性的值为null  
应由对象自动打开或删除套接字对象，调用者不可改动此属性的值  

[返回对象:tcpaclientObject](https://www.aardio.com/zh-cn/docs/library-reference/wsock/tcp/asyncClient.html#tcpaclientObject)

### websocketjsonClientrpcObject.url <a id="websocketjsonClientrpcObject.url" href="#websocketjsonClientrpcObject.url">&#x23;</a>
上次成功连接的网址  
也可以用于指定下次连接的默认网址

### websocketjsonClientrpcObject.userAgent <a id="websocketjsonClientrpcObject.userAgent" href="#websocketjsonClientrpcObject.userAgent">&#x23;</a>
客户端应用程序代理头  
默认为"Mozilla/5.0"

### websocketjsonClientrpcObject.varargs <a id="websocketjsonClientrpcObject.varargs" href="#websocketjsonClientrpcObject.varargs">&#x23;</a>
默认值为true,  
值为true时将不定个数的参数放入数组发送给服务端  
值为false时直接将单个参数发送给服务端  

JSON-RPC 2.0一个会制造混乱的地方：  
如果params是一个数组，并没有规定是展开为一个参数，还是作为一个数组参数。  

目前aardio的RPC服务端会负责展开数组作为多个参数，  
但客户端需要在这里手动设置

### websocketjsonClientrpcObject.version <a id="websocketjsonClientrpcObject.version" href="#websocketjsonClientrpcObject.version">&#x23;</a>
值为JSON-RPC协议版本："2.0"  
不应该修改这个值

### websocketjsonClientrpcObject.waitForConnected(关联窗口句柄,超时) <a id="websocketjsonClientrpcObject.waitForConnected" href="#websocketjsonClientrpcObject.waitForConnected">&#x23;</a>
等待连接到WebSocket服务端  
所有参数可选,超时以毫秒为单位,  

连接成功返回true,失败返回false或null

### websocketjsonClientrpcObject.xcall(method,param) <a id="websocketjsonClientrpcObject.xcall" href="#websocketjsonClientrpcObject.xcall">&#x23;</a>

```aardio
websocketjsonClientrpcObject.xcall("Page.navigate",{  
    url = "网址"  
}).end = function(result,err){  
	/*调用JSON-RPC服务端的指定方法  
服务器应答后回调此函数返回值的成员函数:end函数  
end函数有2个回调参数,参数@1为result，参数@2为err  
失败err参数非空*/  
}
```

