thirft使用THsHaServer模式

来源:互联网 发布:赢顺云交易软件下载 编辑:程序博客网 时间:2024/06/04 08:14

THsHaServer:半同步半异步的服务模型,一个单独的线程用来处理网络I/O,一个worker线程池用来进行消息的处理
半同步半异步的服务端模型,需要指定为: TFramedTransport 数据传输的方式。

THsHaServer类是TNonblockingServer类的子类,在TNonblockingServer模式中,采用一个线程来完成对所有socket的监听和业务处理,造成了效率的低下,THsHaServer模式的引入则是部分解决了这些问题。THsHaServer模式中,引入一个线程池来专门进行业务处理

这里写图片描述

THsHaServer的优点:
与TNonblockingServer模式相比,THsHaServer在完成数据读取之后,将业务处理过程交由一个线程池来完成,主线程直接返回进行下一次循环操作,效率大大提升;
THsHaServer的缺点:
主线程需要完成对所有socket的监听以及数据读写的工作,当并发请求数较大时,且发送数据量较多时,监听socket上新连接请求不能被及时接受。

服务端代码:

private static void hsHaServer() throws TTransportException {        TNonblockingServerTransport serverSocket=new TNonblockingServerSocket(8888);         THsHaServer.Args serverParams=new THsHaServer.Args(serverSocket);        serverParams.protocolFactory(new TBinaryProtocol.Factory());        serverParams.transportFactory(new TFramedTransport.Factory());        serverParams.processor(new ISayHello.Processor<Iface>(new SayHelloImpl()));        TServer server=new THsHaServer(serverParams); //简单的单线程服务模型,常用于测试        server.serve();    }

客户端代码:

private static void hsHaClient() throws Exception {        //异步调用管理器          TAsyncClientManager clientManager = new TAsyncClientManager();        //设置传输通道,调用非阻塞IO          TNonblockingTransport transport = new TNonblockingSocket("localhost", 8888);        //协议要和服务端一致          TProtocolFactory tprotocol = new TBinaryProtocol.Factory();        ISayHello.AsyncClient asyncClient = new ISayHello.AsyncClient(tprotocol, clientManager, transport);        CountDownLatch latch = new CountDownLatch(1);        MethodCallback callBack = new MethodCallback(latch);        System.out.println("call method sayHello start ...");        // 调用服务          asyncClient.sayHello("jack", callBack);        System.out.println("call method sayHello .... end");        //等待完成异步调用          boolean wait = latch.await(30, TimeUnit.SECONDS);        System.out.println("latch.await =:" + wait);    }

MethodCallback类:

/* * 文件名:MethodCallback.java * 版权:Copyright 2007-2017 517na Tech. Co. Ltd. All Rights Reserved.  * 描述: MethodCallback.java * 修改人:peiyu * 修改时间:2017年3月16日 * 修改内容:新增 */package com.thirft.client;import java.util.concurrent.CountDownLatch;import org.apache.thrift.async.AsyncMethodCallback;/** * @author peiyu */public class MethodCallback implements AsyncMethodCallback<Object> {    private Object response = null;    private CountDownLatch latch;    public MethodCallback() {    }    public MethodCallback(CountDownLatch latch) {        this.latch = latch;    }    public Object getResult() {        // 返回结果值        return this.response;    }    // 处理服务返回的结果值    @Override    public void onComplete(Object response) {        this.response = response;        latch.countDown();    }    // 处理调用服务过程中出现的异常    @Override    public void onError(Exception paramException) {        latch.countDown();    }}
0 0
原创粉丝点击