Thrift 多线程半同步半异步的服务模型-TThreadedSelectorServer

TThreadedSelectorServer是最成熟,也是被业界所推崇的RPC服务模型。TThreadedSelectorServer是对以上NonblockingServer的扩充, 其分离了Accept和Read/Write的Selector线程, 同时引入Worker工作线程池. 它也是种Half-sync/Half-async的服务模型。

Thrift 多线程半同步半异步的服务模型-TThreadedSelectorServer_第1张图片

MainReactor就是Accept线程, 用于监听客户端连接, SubReactor采用IO事件线程(多个), 主要负责对所有客户端的IO读写事件进行处理. 而Worker工作线程主要用于处理每个rpc请求的handler回调处理(这部分是同步的)。

下面看服务端的实现:

 

[java]  view plain  copy
 
 print ? 在CODE上查看代码片
  1. package cn.slimsmart.thrift.demo.helloworld;  
  2.   
  3. import org.apache.thrift.TException;  
  4. import org.apache.thrift.TProcessor;  
  5. import org.apache.thrift.protocol.TBinaryProtocol;  
  6. import org.apache.thrift.server.TServer;  
  7. import org.apache.thrift.server.TThreadedSelectorServer;  
  8. import org.apache.thrift.transport.TFramedTransport;  
  9. import org.apache.thrift.transport.TNonblockingServerSocket;  
  10.   
  11. /** 
  12.  * 多线程Half-sync/Half-async的服务模型. 
  13.  * 需要指定为: TFramedTransport 数据传输的方式。 
  14.  */  
  15. public class HelloTThreadedSelectorServer {  
  16.       
  17.     // 注册端口  
  18.     public static final int SERVER_PORT = 8080;  
  19.   
  20.     public static void main(String[] args) throws TException {  
  21.           
  22.         TProcessor tprocessor = new HelloWorld.Processor<HelloWorld.Iface>(new HelloWorldImpl());  
  23.         // 传输通道 - 非阻塞方式    
  24.         TNonblockingServerSocket serverTransport = new TNonblockingServerSocket(SERVER_PORT);  
  25.           
  26.         //多线程半同步半异步  
  27.         TThreadedSelectorServer.Args tArgs = new TThreadedSelectorServer.Args(serverTransport);  
  28.         tArgs.processor(tprocessor);  
  29.         tArgs.transportFactory(new TFramedTransport.Factory());  
  30.         //二进制协议  
  31.         tArgs.protocolFactory(new TBinaryProtocol.Factory());  
  32.         // 多线程半同步半异步的服务模型  
  33.         TServer server = new TThreadedSelectorServer(tArgs);  
  34.         System.out.println("HelloTThreadedSelectorServer start....");  
  35.         server.serve(); // 启动服务  
  36.           
  37.     }  
  38.   
  39. }  

 

http://blog.csdn.net/zhu_tianwei/article/details/44115297

 

 

 

 

你可能感兴趣的:(thrift)