当前位置: 首页 > 文档资料 > Hprose 中文文档 >

1.9 服务端

优质
小牛编辑
135浏览
2023-12-01

服务端

服务端统一为一个 Service 类型。下面来分别介绍它所包含的属性和方法。

属性

  • timeout
  • codec
  • maxRequestLength
  • names
  • options

timeout 属性是用来限制服务代码执行时间的,如果服务执行超时,则返回超时异常。需要注意的是,即使服务执行超时,也不意味着在超时后,服务代码本身会被强行中断,实际上服务代码仍然会继续执行,只是执行结果不会作为调用结果被返回。因此,如果客户端调用某个服务发生超时异常,应该检查服务本身是否编写错误,如果某个服务因为死锁而造成超时,服务器最终将会被该服务耗尽资源。该设置默认值为 30 秒。

codec 属性用来设置编解码器。默认设置是 hprose 编解码器,如果替换为 JSONRPC 编解码器,则服务器不但可以处理 hprose 请求,也可以同时处理 JSONRPC 请求。

maxRequestLength 属性用来设置请求编码后的最大字节数。如果请求字节数超过该设置,则返回异常。该设置默认值为 0x7FFFFFFF(2147483647),相当于没有限制。为了保证不会因为请求太大造成内存溢出的错误,最好根据具体业务将该值设置为一个更为合理的值。

names 只读属性。返回服务端已发布的所有方法名列表。

options 只读属性。它是一个 Map<String, Object> 的属性,它当中默认没有值,服务端默认也没有任何针对它的操作。它是为用户提供扩展功能使用的,用户在编写针对服务端的自定义插件时,可以使用它来存取用户自定义的全局选项。

方法

  • bind
  • handle
  • process
  • execute
  • use
  • unuse
  • get
  • remove
  • add
  • addMissingMethod

bind 方法的功能跟处理器接口的 bind 方法功能一致,但是处理器接口的 bind 方法是针对具体某个类型的服务器的。而服务对象上的 bind 方法,可以跟已经注册过的任何服务器进行绑定。因此,用户不需要调用处理器接口上的 bind 方法,而应该使用服务对象上的 bind 方法来统一操作。

handle 方法接受编码后的请求并返回服务执行后已编码响应结果。该方法是留给处理器实现 handler 方法时使用的,用户如果不需要编写自定义处理器,则不需要关心该方法。

process 方法是服务端的输入输出处理器链中最后执行的方法。如果在实现服务端的输入输出处理器时,希望跳过输入输出处理器链上后面所有的输入输出处理器,可以通过直接调用该方法来代替调用 next。其他情况下,用户不需要关心该方法。

execute 方法是服务端的调用处理器链中最后执行的方法。如果在实现服务端的调用处理器时,希望跳过调用处理器链上后面所有的调用处理器,可以通过直接调用该方法来代替调用 next。其他情况下,用户不需要关心该方法。

use 方法用来添加输入输出处理器或调用处理器,unuse 方法用来删除输入输出处理器或调用处理器。对于不支持使用 use 作为方法名的语言,使用 addHandlerremoveHandler 代替。

get 方法用来通过发布名称获取已发布的服务方法对象。在某些语言中(比如 C#),允许发布相同名称但参数个数不同的重载方法,因此,在这些语言中,get 方法本身会有 2 个参数(发布名称,参数个数)。

remove 方法用来删除已发布的服务方法。该方法的参数与 get 方法相同。

add 方法用来添加发布的服务方法。该方法在不同的语言中,可以根据具体情况提供多个重载或不同命名的多个实现,例如:addMethodaddMethodsaddFunctionaddFunctionsaddStaticMethodsaddInstanceMethods 等等。

addMissingMethod 方法用来添加一个通用的服务方法,当客户端调用的服务方法不存在时,该服务方法才会被调用。

当调用 get 方法时,如果查找的具体服务方法不存在,但是通用服务方法存在的话,则会返回通用服务方法,否则返回 null

另外,还可以通过 service[name] 的方式来存取处理器对象,例如通过 service["http"] 可以获得已经注册的 HttpHandler 对象实例。