使用netty构建http服务器

近期需要对得到的搜索关键词做敏感词过滤,本来的想法是自己通过建立敏感词库,然后通过本地词库的匹配来实现,但是查询的效率上不好保证,通过在网上查询找到海鸥api可以实现,由于是在公网上查询,并且查询量也比较大,就考虑把查询过的敏感词存储到hbase中,下次查询如果在hbase中命中的话,就不用频繁调用api去查询了。

使用netty作为服务端接受传递的字符串,首先去hbase中查询,如果命中,直接返回包含敏感词,如果hbase中没有命中,就调用海鸥的接口查询,返回不包含敏感词就返回不包含敏感词,如果返回包含敏感词,解析返回的结果把敏感词存储到hbase中,返回包含敏感词。

在使用netty的过程中,遇到了不少的问题,netty是比较通用的框架,底层使用异步事件处理模型,作为http服务器的时候也只是在channel中添加一个HttpServerCodec的编解码包。

还可以添加自定义的handler来处理request请求,然后根据request中的url来分别处理并且返回response,但是习惯了使用spring开发接口服务,对于使用netty怎么实现类似spring的MVC结构不清楚,开发起来还是很别扭的,这个业务的逻辑比较简单,也只是对外提供一个接口,所以直接就在一个handler中处理了,对于需要提供多个接口怎么更好的实现需要进一步的研究。

使用netty作为httpclient的时候,发现处理response的时候,也是通过在管道中添加自定义的handler处理,但是没有直接能够返回到调用的线程中,后来使用了async-http-client作为httpclient,需要研究一下async-http-client是怎么封装的netty。

还遇到一个比较诡异的地方是在handler中调用自定义的工具类的方法的时候总是不成功,最后把工具类中的方法放到handler的类中就可以了,这个需要后面分析一下原因。

对于不熟悉的知识,用起来真的是到处都是坑。