这是用java语言实现的客户端连接kurento-jsonrpc-server服务,或者连接其它websocket服务实现了json-rpc协议的服务器,它允许java程序通过json-rpc调用kurento-jsonrpc-server,它也发布一个maven依赖项中,通过在项目中加入以下依赖:
<dependency> <groupId>org.kurento</groupId> <artifactId>kurento-jsonrpc-server</artifactId> <version>6.6.1-SNAPSHOT</version> </dependency> |
4.1创建一个客户端
与服务器相反,客户端是与框架无关的,所以它能被用于常规的java应用,javaEE,Spring等等,创建一个客户端并发送请求到服务器是非常简单的,服务器的URI是通过JsonRpcClientWebSocket类的构造函数,假设运行在同样的机器上。
JsonRpcClient client = new JsonRpcClientWebSocket("ws://localhost:8080/echo"); |
4.2发送一个请求
一个json-rpc调用代表着发送一个请求对象到服务器,请求对象包括以下成员
jsonrpc:json-rpc的协议版本字符串,本例使用”2.0”
method:调用方法的名称字符串
params:调用method方法参数值,可以省略,类型由服务器定义
id:客户端的标识,如果是一个通知则不需要id,服务器返回对象也有同样的值,这个成员用于关联两个对象的上下文。
所有的这些成员用户必须要设置”method”和”params”,其它的两个由库进行管理
服务器定义上一章期望的JsonObject和只写了一个echo方法,返回调求的”params”对象,服务器通过client.sendRequest(request)返回已经将params封装到Response<JsonElement>给客户端:
Request<JsonObject> request = new Request<>(); request.setMethod("echo"); JsonObject params = new JsonObject(); params.addProperty("some property", "Some Value"); request.setParams(params); Response<JsonElement> response = client.sendRequest(request); |
4.2.1其它消息:通知
通知的请求对象是不包括”id”成员,这个请求的通知表示客户端对响应对象不感兴趣。不需要返回响应对象给客户端。通知没有确认定义,它不用返回一个响应对象,所以发送者不需要处理一些错误(比如“非法参数”,“内部错误”)
client.sendNotification("echo"); |
4.2.2服务响应
当服务返回rpc调用,这个返回除了通知以外,当个的jsonobject包括以下成员:
jsonrpc:json-rpc的协议版本字符串,本例使用”2.0”
result:这个成员只有成功才存在,值由调用服务器确定。
error:这个成员只有存在错误信息才存在,这个类型是错误对象
id:这是请求成员,这个必须与请求的id成员一致。
响应的包括”result”或者”error”成员,查不是全部存在。
Error对象
当rpc调用遇到错误时,响应对象包括error成员,error的值是一个对象,对象成员包括:
code:整型的错误类型
message:错误的简短描述
data:包含有关错误的其他信息的原始值或结构化值,可能是省略由服务器定义(例如,详细的错误信息,嵌套的错误等)
4.3添加连接监听
客户端可以为连接事件设置监听,用户能定义JsonRpcWSConnectionListener重写某些方法,连接监听一旦被定义,就可以传递给客户端的构造函数,一旦事件被产生了就可以调用这些方法。
JsonRpcWSConnectionListener listener = new JsonRpcWSConnectionListener() {
@Override public void reconnected(boolean sameServer) { // ... }
@Override public void disconnected() { // ... }
@Override public void connectionFailed() { // ... }
@Override public void connected() { // ... } } ; JsonRpcClient client = new JsonRpcClientWebSocket("ws://localhost:8080/echo", listener); |
4.4管理心跳
服务的心跳机制是定时发送ping消息,可以控制客户端的以下方法:
enableHeadrtbeat:启用心跳机制,默认是间隔5秒,但是你可以重写这个方法改变间隔时间,这个方法接收数字型参数。
disableHeartbeat:停止定期发送ping消息
4.5修改默认超时时间
不仅仅ping消息间隔时间可以配置,其它的也可以配置
Connetction timeout :这个是等待客户端与服务的连接建立。
Idle timeout:如果一定时间内没有消息发送,这个连接将被空闲和关闭
Request timeout:服务器应该在一定时间内回答请求。如果消息没有在这个时间内回答用户请求,假定服务器没有返回请求,客户端产生TransportException异常。
4.6java文档
• kurento-jsonrpc-client