hprose for dotnet 自定义拦截器实现

本文介绍了在hprose for dotnet中自定义拦截器的实现过程,包括分析hprose架构图、上下文对象、插件处理器,以及如何在服务端通过IOHandler拦截请求,实现IP地址过滤的鉴权机制。通过理解源码和实现拦截器,加深了对hprose框架的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

1.问题:hprose没有已经实现好的拦截器
2.解决:根据hprose提供的架构及上下文对象,对github上已经搭建好的日志、hprose for java过滤器实例进行研究,自定义拦截器配置。

解决步骤

1.架构图:github:hprose for dotnet

在hprose3.0开发者手册里,我重新对hprose的架构有了新的认识,首先是hprose的架构图。
在这里插入图片描述
这里分为客户端和服务端,客户端调用过程中将先执行invokeHandler,即调用处理器;在将调用的方法即具体参数通过解编码器进行序列化和反序列化,值得一提的是,这里可以通过hprose序列化协议,也根据需要自定义解编码器,进行不同的序列化协议,例如jsonrpc解编码器。之后通过iohandler,即输入输出处理器,传输到传输层。以上都在wiki中有了明确的说明。
在上图中,我们将传输层抽象为transports对象和handlers对象,它们将对不同的通讯协议提供不同的通讯方式,这将由最开始客户端和服务端注册时所声明的传输协议保持一致。例如可以采用tcp协议、可以采用http协议等。
hprose或者说rpc协议的远程过程调用正是通过这种方式让使用者不需要知道底层的传输协议就可以进行正常的通信。
回到正题,经过传输层后通信到达服务端,服务端的处理器与客户端保持一致,但调用过程恰恰相反,或者说对称。先有iohandler进行处理,再经过解编码器处理后传输给invokehandlers,最后再执行;执行过后原路返回,依照原有的路线和既定的传输协议携带数据返回客户端。这就是hprose中一个远程过程调用的全部过程。

2.上下文对象:github:hprose for dotnet

上下文对象context中类似于kv键值对的形式,key是字符串形式,value可以是任何形式的参数(Object)。上下文对象封装有不同的方法(clone、contains),另:客户端上下文对象为clientcontext,服务端上下文对象为servicecontext,两者均继承自context。
在这里,开发者这样建议我们:我们可以使用clone方法创建多个上下文对象副本,然后通过修改副本上下文对象的服务地址属性,就可以将一个调用变为对多个不同服务的调用。通过这个我们就可以在拆分微服务后对多个微服务进行调用并返回结果,这样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值