输入输出中间件的形式为:

    是原始请求数据,对于客户端来说它是输出数据,对于服务器端来说,它是输入数据。

    context 是调用上下文对象。

    next 表示下一个中间件。通过调用 next 将各个中间件串联起来。

    next 的返回值 response 是返回的响应数据。对于客户端来说,它是输入数据。对于服务器端来说,它是输出数据。

    执行结果为:

    这个结果跟使用 的例子的结果一样。

    但是我们发现,这里使用 Hprose 中间件要写的代码比起 更简单,只需要一个方法就可以了。

    另外,因为这个例子中,我们没有使用过滤器功能,因此使用 AddBeforeFilterHandler(或 BeforeFilter.Use)方法或者 AddAfterFilterHandler(或 )方法添加中间件处理器效果都是一样的。

    但如果我们使用了过滤器的话,那么 AddBeforeFilterHandler 添加的中间件处理器的 request 数据是未经过过滤器处理的。过滤器的处理操作在 next 的最后一环中执行。next 返回的响应 response 是经过过滤器处理的。

    AddAfterFilterHandler 添加的处理器所收到的 request 都是经过过滤器处理以后的,但它当中使用 next 方法返回的 是未经过过滤器处理的。

    下面,我们在来看一个结合了压缩过滤器和输入输出缓存中间件的例子。

    压缩、缓存、计时

    压缩我们使用 一章中的 compress_handler.go,这里就不列代码了。

    该程序运行结果为:

    我们可以看到两次的执行结果都出来了,但是中间件的输出内容只有一次。原因就是第二次执行时,缓存中间件将缓存的结果直接返回了。因此后面所有的步骤就都略过了。