wssccc


我们在世纪末的流光中追寻过往,追寻那些渐渐模糊的面容


如何写一个connector

前一阵的hackathon上,为tomcat做了一个私有协议的connector。

大体上来说,就是一个类似AJP协议转换器的东西。

图片来自网络

tomcat官方自带了几个connector,包括HTTP1.1和AJP等。
粗略看了下源码,tomcat设计时是留出了扩展的可能性的,于是想到应该能把远程调用(如thrift)的method映射到REST API上面,实现业务的平滑迁移。

细节倒很简单,实现一个ProtocolHandler类,在里面起一个私有协议的服务端,在接收到远程调用时,将请求转成CoyoteRequest,丢到Adapter中,然后tomcat容器会做剩下的工作。返回是写在一个OutputStream里面的,Adapter返回之后,再将外层服务器的调用返回就可以了。

最终出来的效果是,提供一个jar包放进tomcat的lib里面,然后配置中多添加一个<connector>的配置就行了。

本来是想做Jetty的协议转换的,直接用构造HTTP请求丢到LocalProtocol就行了,后来听说tomcat用的多一点,做出来会比较实用。