输入输出中间件的形式为:
是原始请求数据,对于客户端来说它是输出数据,对于服务器端来说,它是输入数据。
context
是调用上下文对象。
next
表示下一个中间件。通过调用 next
将各个中间件串联起来。
next
的返回值 response
是返回的响应数据。对于客户端来说,它是输入数据。对于服务器端来说,它是输出数据。
执行结果为:
这个结果跟使用 的例子的结果一样。
但是我们发现,这里使用 Hprose 中间件要写的代码比起 更简单,只需要一个方法就可以了。
另外,因为这个例子中,我们没有使用过滤器功能,因此使用 AddBeforeFilterHandler
(或 BeforeFilter.Use
)方法或者 AddAfterFilterHandler(或 )方法添加中间件处理器效果都是一样的。
但如果我们使用了过滤器的话,那么 AddBeforeFilterHandler
添加的中间件处理器的 request
数据是未经过过滤器处理的。过滤器的处理操作在 next
的最后一环中执行。next
返回的响应 response
是经过过滤器处理的。
而 AddAfterFilterHandler
添加的处理器所收到的 request
都是经过过滤器处理以后的,但它当中使用 next
方法返回的 是未经过过滤器处理的。
下面,我们在来看一个结合了压缩过滤器和输入输出缓存中间件的例子。
压缩、缓存、计时
压缩我们使用 一章中的 compress_handler.go,这里就不列代码了。
该程序运行结果为:
我们可以看到两次的执行结果都出来了,但是中间件的输出内容只有一次。原因就是第二次执行时,缓存中间件将缓存的结果直接返回了。因此后面所有的步骤就都略过了。