zoukankan      html  css  js  c++  java
  • Java thrift服务器和客户端创建实例

    首先环境介绍一下:

    1.IntelliJ IDEA 2017.1

    2.thrift-0.9.3

    相信大家在看我这篇文章的时候已经对thrift通信框架已有所调研,这里就不再赘述了,直接进入正题:

    <1>创建HelloWorld.thrift

    namespace java com.thrift.demo
    
    service HelloWorldService{
    string sayHello(1:string username)
    }

     <2>利用thrift生成HelloWorld.java文件,cmd指令下进入thrift当前目录下输入命令

    thrift.exe -gen java HelloWorld.thrift

    java为要生成文件的类型,HelloWorld.thrift为前面的文件。

    <3>创建IDEA 下的maven项目,其中的好处就不一一说明了,最重要的一条就是可以在pom.xml文件中添加dependency,能够在项目中自行下载库文件,方便协同开发中出现的开发包不对应的情况。

    <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.thrift</groupId>
                <artifactId>libthrift</artifactId>
                <version>0.9.3</version>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
                <version>1.7.5</version>
            </dependency>

    上述pom引入相应的依赖项就可以让它自行下载。

    <4>项目的结构图当前如下所示:

    File--Project Structure--Modules,在main文件夹下新建java文件夹并设为Soueces类型(因为在Sources文件下可以新建java class文件)

    同时将thrift生成的HelloWorld.java文件复制到该目录下

    <5>实现接口Iface

    java代码:HelloWorldImpl.java

     1 package com.jmust.thrift.demo;
     2 
     3 import org.apache.thrift.TException;
     4 
     5 /**
     6  * Created by Administrator on 2017/3/31.
     7  */
     8 public class HelloWorldImpl implements HelloWorldService.Iface {
     9 
    10     public HelloWorldImpl() {
    11     }
    12 
    13     @Override
    14     public String sayHello(String username) throws TException {
    15         return "Hi,"+username+"Welcome to my blog http://www.cnblogs.com/zfygiser";
    16     }
    17 }

    <6>服务端TSimpleServer

    java代码:HelloServer.java

    /**
     * Created by Administrator on 2017/3/31.
     */
    package com.jmust.thrift.demo;
    
    import org.apache.thrift.TProcessor;
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.server.TServer;
    import org.apache.thrift.server.TSimpleServer;
    import org.apache.thrift.transport.TServerSocket;
    
    public class HelloServer {
        public final static int SERVER_PORT = 7099;
        private static String SERVER_IP = "localhost";
    
        public void startServer() {
            try {
                System.out.println("HelloWorld Server start...");
    
                TServerSocket serverTransport = new TServerSocket(SERVER_PORT);
                TServer.Args args = new TServer.Args(serverTransport);
                TProcessor process = new HelloWorldService.Processor(new HelloWorldImpl());
                TBinaryProtocol.Factory portFactory = new TBinaryProtocol.Factory(true, true);
                args.processor(process);
                args.protocolFactory(portFactory);
    
                TServer server = new TSimpleServer(args);
                server.serve();
    
            } catch (Exception e) {
                System.out.println("Server start error");
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            HelloServer server = new HelloServer();
            server.startServer();
        }
    }

    <7>编写客户端代码

    java代码:Client.java

    package com.jmust.thrift.demo;
    
    import org.apache.thrift.protocol.TBinaryProtocol;
    import org.apache.thrift.protocol.TProtocol;
    import org.apache.thrift.transport.TSocket;
    import org.apache.thrift.transport.TTransport;
    
    /**
     * Created by Administrator on 2017/4/1.
     */
    public class Client {
        public static final int SERVER_PORT = 7099;
        public static final String SERVER_IP = "localhost";
    
        public void startClient(String username) {
            TTransport tTransport = null;
            try {
                tTransport = new TSocket(SERVER_IP, SERVER_PORT);
                //协议要和服务端一致
                TProtocol protocol = new TBinaryProtocol(tTransport);
                HelloWorldService.Client client = new HelloWorldService.Client(protocol);
                tTransport.open();
    
                String result = client.sayHello(username);
                System.out.println("Thrift client result=" + result);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) {
            Client client = new Client();
            client.startClient("zfy");
        }
    }

    客户端测试成功,截图如下:

  • 相关阅读:
    SQL Server删除表及删除表中数据的方法
    springmvc+spring+mybatis+sqlserver----插入一条新数据
    fiddler filters 使用(fiddler只显示指定请求,fiddler不显示指定请求,即filter请求过滤)(转)
    rest-vs-websocket-comparison-benchmarks
    需求分析+概要设计+详细设计
    win10专业版怎么激活?
    Risingstack we help companies succeed with Node.js
    Mouse Recoil
    Node.js async await
    Node.js Performance
  • 原文地址:https://www.cnblogs.com/zfygiser/p/6651645.html
Copyright © 2011-2022 走看看