1.6 客户端
客户端
服务端统一为一个 Client
类型。下面来分别介绍它所包含的属性和方法。
属性
timeout
codec
requestHeaders
uris
timeout
属性用来限制远程调用的执行时间,如果远程调用执行超时,则返回超时异常。需要注意的是,如果远程调用服务执行超时,那么客户端和服务端之间的连接可能会断开。该设置默认值为 30 秒。
codec
属性用来设置编解码器。默认设置是 hprose 编解码器,如果替换为 JSONRPC 编解码器,则客户端会变成 JSONRPC 客户端。
requestHeaders
属性用来设置所有远程调用共同的请求头部信息。
uris
用来设置服务地址列表。需要注意,当为该属性赋值时,所设置的属性中服务地址列表的顺序会自动随机排序,默认情况下,调用只使用第一个服务地址。因此对于不同到客户端来说,调用的服务地址可能是不同的。当有众多的客户端时,虽然默认情况下,每个客户端所发起的调用都会发往某一个特定的服务地址,但是所有客户端发起的调用会被平均的发送到设置的所有服务地址上。
方法
useService
use
unuse
invoke
call
request
transport
abort
useService
方法用来返回远程调用的代理对象。对于不同的语言,该方法的使用也会有所区别,有些语言需要定义接口,而有些语言则不需要定义接口。
use
方法用来添加输入输出处理器或调用处理器,unuse
方法用来删除输入输出处理器或调用处理器。对于不支持使用 use
作为方法名的语言,使用 addHandler
和 removeHandler
代替。
invoke
方法用来直接调用远程方法,对于不同的语言,该方法可能是表示同步调用,也可能表示异步调用。但是如果在某个语言中同时支持同步和异步调用,通常同步版本使用 invoke
这个方法名,而异步版本使用 invokeAsync
这个方法名。
call
方法是客户端的调用处理器链中最后执行的方法。如果在实现客户端的调用处理器时,希望跳过调用处理器链上后面所有的调用处理器,可以通过直接调用该方法来代替调用 next
。其他情况下,用户不需要关心该方法。
request
方法是客户端的输入输出处理器链的入口方法。如果需要直接传输已编码的请求,又同时希望能够调用所有的输入输出处理器,那么可以直接调用该方法。通常在服务端的输入输出处理器中,将客户端作为代理使用时,使用该方法可以跳过编解码的过程,从而有效的提高处理效率。其他情况下,用户不需要关心该方法。
transport
方法是客户端的输入输出处理器链中最后执行的方法。如果在实现客户端的输入输出处理器时,希望跳过输入输出处理器链上后面所有的输入输出处理器,可以通过直接调用该方法来代替调用 next
。其他情况下,用户不需要关心该方法。
abort
方法用来中断客户端和服务端的连接。但是对于某些传输协议,该方法可能没有实际效果。
另外,transport
和 abort
方法跟注册的传输接口实现有关。可以通过 client[name]
的方式来存取实际的传输接口对象,例如通过 client["http"]
可以获得已经注册的 HttpTransport
对象实例。