模块简单设计——用Jetty实现一个client adapter
首先看看下面的应用场景

传统的服务器端为若干个客户端提供服务,一般需要开启多个服务器端进程。为了进一步提升服务器端的处理能力,可以如图所示将服务解耦为两部分(adapter与workers),它们之间通过消息队列传输数据,其中workers处理具体业务,adapter负责接入请求以及反馈结果,具体包含下面两个工作。
1,将所有客户端的请求发送到消息队列(进而传给后台处理)
2,后台处理完毕后将结果返回响应队列,client adapter获取到结果后返回给相应客户端。
我们选择用Jetty(8),redis以及php简单实现这个场景,主要用到jetty的continuation机制和redis的list数据结构
?
A,先配置一个服务器如下,同时开启一个守护线程阻塞监听response queue(用到json lib库以及jedis库)
C,实现后端worker.php(可以自定义worker进程数,进程数多能获取更好的并发)(用到predis库)
redis 127.0.0.1:6379> lrange request_queue 0 15 1) "{"request_sid":"igiwkwnb715aphw8uvtfa6rj","params":"3"}" 2) "{"request_sid":"wsrglxa3h6ef19ik5i0nbiiys","params":"2"}" 3) "{"request_sid":"tyiqoj6awj5t16ddpqusftwc8","params":"6"}" 4) "{"request_sid":"1052tgkiyy7c31bmxjtbom7ca","params":"5"}" 5) "{"request_sid":"17jo1xwnnkd3h1mhcqcfplrl5k","params":"8"}" 6) "{"request_sid":"1xk521sq6vmmf6enxauwzduj9","params":"4"}" 7) "{"request_sid":"1cxnir1slgjiq1o2n3xwznh0kk","params":"9"}" 8) "{"request_sid":"961vf8hao3stsv4vt1qif3ws","params":"7"}" 9) "{"request_sid":"35pfn5au6p8qdbri17p636si","params":"10"}"10) "{"request_sid":"1ca4wy8qsfr7av0hwk8xtlqhp","params":"1"}"redis 127.0.0.1:6379> lrange response_queue 0 15 1) "{"request_sid":"tyiqoj6awj5t16ddpqusftwc8","results":"6"}" 2) "{"request_sid":"igiwkwnb715aphw8uvtfa6rj","results":"3"}" 3) "{"request_sid":"wsrglxa3h6ef19ik5i0nbiiys","results":"2"}" 4) "{"request_sid":"35pfn5au6p8qdbri17p636si","results":"10"}" 5) "{"request_sid":"1052tgkiyy7c31bmxjtbom7ca","results":"5"}" 6) "{"request_sid":"1cxnir1slgjiq1o2n3xwznh0kk","results":"9"}" 7) "{"request_sid":"17jo1xwnnkd3h1mhcqcfplrl5k","results":"8"}" 8) "{"request_sid":"961vf8hao3stsv4vt1qif3ws","results":"7"}" 9) "{"request_sid":"1xk521sq6vmmf6enxauwzduj9","results":"4"}"10) "{"request_sid":"1ca4wy8qsfr7av0hwk8xtlqhp","results":"1"}"