Hprose 过滤器是一个接口,它有两个方法:

其中 的作用是对输入数据进行处理,outputFilter 的作用是对输出数据进行处理。

data 参数就是输入输出数据,它是 Uint8Array 类型的。这两个方法的返回值也是 Uint8Array 类型的数据,它表示已经处理过的数据,如果你不打算对数据进行修改,你可以直接将 data 参数作为返回值返回。

context 参数是调用的上下文对象,我们在服务器和客户端的介绍中已经多次提到过它。

不论是客户端,还是服务器,都可以添加多个过滤器。假设我们按照添加的顺序把它们叫做 filter1, filter2, … filterN。那么它们的执行顺序是这样的。

  1. | |filter1|----->|filter2|-----> ... ----->|filterN| |---------+
  2. | +-------+ +-------+ +-------+ | v
  3. +----------------------------------------------------+ +---------------+
  4. | Hprose Server |
  5. +-------------------- inputFilter -------------------+ +---------------+
  6. | +-------+ +-------+ +-------+ | |
  7. | +-------+ +-------+ +-------+ |

client.js

客户端输出

  1. Cs5"hello"a1{s5"world"}z
  2. Rs12"Hello world!"z
  3. Hello world!

有时候,我们希望能够对调用执行时间做一个统计,对于客户端来说,也就是客户端调用发出前,到客户端收到调用结果的时间统计。对于服务器来说,就是收到客户端调用请求到要发出调用结果的这一段时间的统计。这个功能,通过过滤器也可以实现。

client.js

客户端输出

  1. It takes 34 ms.

在 Hprose for JavaScript 中已经提供了一个现成的 JSONRPC 的过滤器。使用它,你可以将 Hprose 客户端变身为 JSONRPC 客户端。

JSONRPC 客户端

客户端只需要设置 filter 属性(或者用 addFilter 方法)为一个 JSONRPCClientFilter 实例对象,Hprose 客户端就马上变身为 JSONRPC 客户端了。不过需要注意一点,添加了 JSONRPCClientFilter 的客户端,是一个纯 JSONRPC 客户端,这个客户端只能跟 JSONRPC 服务器通讯,不能再跟纯 Hprose 服务器通讯了,但是跟 Hprose + JSONRPC 的双料服务器通讯是没问题的。

Hprose 过滤器的功能很强大,除了上面这些用法之外,你还可以结合 Hprose 中间件来实现更为复杂的功能。不过这里就不再继续举例说明了。

原文: