概述
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();
}
}
最后
以上就是专注八宝粥为你收集整理的thirft使用THsHaServer模式的全部内容,希望文章能够帮你解决thirft使用THsHaServer模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复