TThreadedSelectorServer是最成熟,也是被业界所推崇的RPC服务模型。TThreadedSelectorServer是对以上NonblockingServer的扩充, 其分离了Accept和Read/Write的Selector线程, 同时引入Worker工作线程池. 它也是种Half-sync/Half-async的服务模型。
MainReactor就是Accept线程, 用于监听客户端连接, SubReactor采用IO事件线程(多个), 主要负责对所有客户端的IO读写事件进行处理. 而Worker工作线程主要用于处理每个rpc请求的handler回调处理(这部分是同步的)。
下面看服务端的实现:
- package cn.slimsmart.thrift.demo.helloworld;
-
- import org.apache.thrift.TException;
- import org.apache.thrift.TProcessor;
- import org.apache.thrift.protocol.TBinaryProtocol;
- import org.apache.thrift.server.TServer;
- import org.apache.thrift.server.TThreadedSelectorServer;
- import org.apache.thrift.transport.TFramedTransport;
- import org.apache.thrift.transport.TNonblockingServerSocket;
-
-
-
-
-
- public class HelloTThreadedSelectorServer {
-
-
- public static final int SERVER_PORT = 8080;
-
- public static void main(String[] args) throws TException {
-
- TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldImpl());
-
- TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);
-
-
- TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);
- tArgs.processor(tprocessor);
- tArgs.transportFactory(new TFramedTransport.Factory());
-
- tArgs.protocolFactory(new TBinaryProtocol.Factory());
-
- TServer server = new TThreadedSelectorServer(tArgs);
- System.out.println("HelloTThreadedSelectorServer start....");
- server.serve();
-
- }
-
- }
http://blog.csdn.net/zhu_tianwei/article/details/44115297
分享到:
相关推荐
客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,页面流量统计等,QPS统计,TP90,TP99,TP95等丰富可视化数据,...
服务端:支持Apache Thrift的各种原生服务线程模型,包括单线程阻塞模型(simple)、单线程非阻塞模型(nonBlocking)、线程池阻塞模型(threadPool)、半同步半异步模型(hsHa)和半同步半异步线程选择器模型...
在0.8.0版本的Thrift中,可能还不直接支持多接口服务,但在0.9.1版本中,Facebook增加了这一特性,使得一个Thrift服务器可以同时提供多个服务接口。 在给定的示例中,"TMultiServiceTest"很可能是一个包含了多个...
spark-hive-thriftserver_2.11-2.1.spark-hive-thrift
RPC框架客户端采用Thrift协议,服务端支持Netty和Thrift的TThreadedSelectorServer半同步半异步线程模型。框架支持动态扩容、服务上下线、权重动态调整、可用性配置、泛化调用、页面流量统计、泛化调用等功能,并...
libevent 是一个高性能的异步 I/O 库,提供了事件驱动的编程模型。Thrift 依赖 libevent 库,因此需要安装 libevent。 安装 libevent 的步骤可以参照以下文章:http://monkey.org/~provos/libevent/ ### 步骤 5:...
1. **异步非阻塞通信**:Netty基于Java NIO技术实现,通过使用异步非阻塞IO(AIO)和多路复用技术,能够在一个线程中处理多个客户端连接,极大地提高了系统的并发处理能力。 - **NIO多路复用模型**:如图2-3所示...
【 Maven-Thrift-Server:构建Thrift服务的Maven实践】 在软件开发中,Thrift是一种高效的跨语言服务开发框架,由Facebook开发并开源。它允许定义数据类型和服务接口,然后自动生成各种编程语言的代码,使得不同...
标题中的"thrift-0.9.1.exe"和"thrift-0.9.2.exe"是Thrift框架的不同版本。这些文件是Windows平台上的可执行程序,用于生成与Thrift相关的代码。0.9.1和0.9.2分别代表了Thrift的两个发行版本,每个版本可能包含了新...
5. **线程模型**:Workerman的多进程模型可以充分利用多核CPU资源,每个Worker进程可以处理多个并发连接。这种模型特别适合处理高并发的RPC请求。 6. **错误处理和异常**:Thrift支持错误处理机制,当服务端发生...
4. **服务模型**:Thrift支持同步和异步服务模型,允许开发者根据实际需求选择合适的通信方式。 5. **客户端和服务器端库**:在解压后的`thrift-0.11.0`文件夹中,你会发现为每种支持的语言都提供了相应的客户端和...
THsHaServer api说是TNonblockingServer的扩展,半同步半异步 可定义的数据类型: 基本类型: bool:布尔值,true 或 false,对应 Java 的 boolean byte:8 位有符号整数,对应 Java 的 byte i16:16 位有符号...
主要是对thrift0.9.0 TSimpleServer、TThreadPoolServer 、TNonblockingServer、THsHaServer等服务模型实例和AsynClient 异步客户端实例代码的演示
3. **多语言支持**:由于Thrift支持多种语言,使用Thrift-Laravel可以轻松地在Laravel应用和其他语言(如Java、Python、Go等)的应用之间建立通信。 四、部署与调试 1. **部署**:将Thrift-Laravel集成到Laravel...
同时,Thrift还提供了异步处理、多线程等高级特性,以应对更复杂的场景。 通过这个Java Thrift Demo,我们可以深入理解Thrift如何在Java中实现RPC通信,包括服务定义、代码生成、服务端实现、客户端调用等关键步骤...
"thrift-0.13.0.zip"这个压缩包包含了Thrift 0.13.0版本的源码和工具,用于生成Go语言的Thrift接口。Thrift IDL文件描述了HBase服务的接口,包括批量读写操作。批量操作在HBase中是非常重要的,因为它们可以显著提高...
理论上并发数量接近服务器带宽,客户端采用thrift协议,服务端支持netty和thrift的TThreadedSelectorServer半同步半异步线程模型,支持动态扩容,服务上下线,权重动态,可用性配置,泛化调用,页面流量统计,泛化...
maven-thrift-plugin-0.1.11-sources.jar
总的来说,"thrift-0.9.0.tar.gz"压缩包是Python开发者进行Thrift服务开发的基础,通过学习和使用Thrift,可以构建高效、可靠的分布式系统。在Python中利用Thrift,不仅可以简化跨语言通信的复杂性,还能提升程序的...
- TThreadPoolServer:多线程服务模型,使用标准的阻塞式IO。 - TNonblockingServer:多线程服务模型,使用非阻塞式IO。 IDL(接口描述语言)是Thrift的核心组件之一,它允许用户使用一种简化的脚本语言来声明...