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
- thirft使用THsHaServer模式
- thirft使用TSimpleServer模式
- thirft使用TThreadedSelectorServer模式
- thirft使用非阻塞模式TNonblockingServer
- Thirft工作模式与协议、示例代码
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Thirft框架介绍
- Android系统---Settings
- python爬虫opener和handler
- C# 构造xml格式的字符串
- Android系统---Settings
- Android系统---Settings
- thirft使用THsHaServer模式
- doctorListController
- 自定义指令
- Vue.js的使用方法
- Object类中getClass方法返回对象的类(带包名的那种)
- 一个简单jqueryAjax前端页面展示
- Apache+php
- JZOJ 3.10 1542——跑步(树状数组+模拟+排序/归并排序)
- 最详细动态规划解析——背包问题