Thrift下Java客户端与服务器端的开发

1创建Thrift文件

Thrift文件与编程语言无关,用于定义数据类型和服务接口,然后生成用来构建RPC客户和服务器所需的全部代码。

1.1编写testJava.thrift

[html] view plain copy
 print?
  1. #!/usr/local/bin/thrift --gen java  
  2.   
  3. namespace java Test  
  4.   
  5. service Something {  
  6.    i32 ping()  
  7. }  

1.2运行thrift编译器,生成项目源文件

在linux命令行下输入:Thrift –gen javatestJava.thrift

生成的源文件在./gen-java/目录下。

 

2创建Java服务器

进入./gen-java目录,确保系统的CLASSPATH设置正确。libthrift.jar,,slf4j-api和slf4j-simple这几个包都需要包含在CLASSPATH里。

2.1编写SomethingImpl.java

[html] view plain copy
 print?
  1. package Test;  
  2.   
  3. import org.apache.thrift.TException;  
  4.    
  5. class SomethingImpl implements Something.Iface {  
  6.  public SomethingImpl() {}  
  7.  public int ping() throws TException {  
  8.     System.out.println( "Recieve ping from client..." );  
  9.     return 0;  
  10. }  
  11. }  

2.2创建Server.java

[html] view plain copy
 print?
  1. package Test;  
  2.    
  3. import java.io.IOException;  
  4. import org.apache.thrift.protocol.TBinaryProtocol;  
  5. import org.apache.thrift.protocol.TBinaryProtocol.Factory;  
  6. import org.apache.thrift.server.TServer;  
  7. import org.apache.thrift.server.TThreadPoolServer;  
  8. import org.apache.thrift.transport.TServerSocket;  
  9. import org.apache.thrift.transport.TTransportException;  
  10.   
  11. public class Server {  
  12. private void start() {  
  13. try {  
  14.    TServerSocket serverTransport = new TServerSocket(7911);  
  15.    Something.Processor processor = new Something.Processor(newSomethingImpl());  
  16.    Factory protFactory = new TBinaryProtocol.Factory(true, true);  
  17.    TServer server = new TThreadPoolServer(processor, serverTransport,protFactory);  
  18.    System.out.println("Starting server on port 7911 ...");  
  19.    server.serve();  
  20.   } catch (TTransportException e) {  
  21.    e.printStackTrace();  
  22.   } catch (Exception e) {  
  23.    e.printStackTrace();  
  24. }  
  25. }  
  26.   
  27. public static void main(String args[]){  
  28.    Server srv = new Server();  
  29.    srv.start();  
  30. }    
  31. }  

3创建Java客户端

创建Client.java

[html] view plain copy
 print?
  1. package Test;  
  2.   
  3. import java.io.IOException;  
  4. import org.apache.thrift.*;  
  5. import org.apache.thrift.protocol.*;  
  6. import org.apache.thrift.transport.*;  
  7.    
  8. public class Client {  
  9.      public static void main(String [] args) {  
  10.           try {  
  11.                     TTransport transport = new TSocket("localhost", 7911);  
  12.                     TProtocol protocol = new TBinaryProtocol(transport);  
  13.                     Something.Client client =new Something.Client(protocol);  
  14.                     transport.open();  
  15.                     System.out.println("Client calls ping()");  
  16.                     client.ping();  
  17.                     transport.close();  
  18.                } catch (TException x) {  
  19.                     x.printStackTrace();  
  20.                }    
  21.        }    
  22. }   

4编译及运行

4.1编译

在linux命令行下输入:javac *.java,生成客户端与服务器端的class文件。

4.2运行

首先启动服务器。退到gen-java目录,输入java Test/Server,屏幕显示如下:

Starting server on port 7911 ...

然后启动客户端。在同一目录下输入java Test/Client,屏幕显示如下:

Client calls ping()

这时服务器端的输出多了一行:

Recieve ping from client...

展开阅读全文

没有更多推荐了,返回首页