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
package com.jmust.thrift.demo; import org.apache.thrift.TException; /**
* Created by Administrator on 2017/3/31.
*/
public class HelloWorldImpl implements HelloWorldService.Iface { public HelloWorldImpl() {
} @Override
public String sayHello(String username) throws TException {
return "Hi,"+username+"Welcome to my blog http://www.cnblogs.com/zfygiser";
}
}
<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");
}
}
客户端测试成功,截图如下:

Java thrift服务器和客户端创建实例的更多相关文章
- openstack私有云布署实践【19 通过python客户端 创建实例VM指定IP地址】
还有一种创建方式 是使用py开发工具,调用openstackclient的方法进行创建实例 ,好处就是可随意指定我们要的虚拟机IP地址,需求的场景就是,某天我们需要主动分配一个比较熟知的IP用作某个服 ...
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...
- golang thrift 源码分析,服务器和客户端究竟是如何工作的
首先编写thrift文件(rpcserver.thrift),运行thrift --gen go rpcserver.thrift,生成代码 namespace go rpc service RpcS ...
- Netty——简单创建服务器、客户端通讯
Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程 ...
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
- Java中的服务器与客户端的简单连接
Java中重点之一就是服务器与客户端的连接,因为是在同一台PC上,所以就设置服务器的地址为“localhost”,注意,我当时试着设置其他名称,但都不行,这个原因还请老司机告一下.另外还要注意,服务端 ...
- C#实现WebSocket协议客户端和服务器websocket sharp组件实例解析
看到这篇文章的题目,估计很多人都会问,这个组件是不是有些显的无聊了,说到web通信,很多人都会想到ASP.NET SignalR,或者Nodejs等等,实现web的网络实时通讯.有关于web实时通信的 ...
- 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输
Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...
- 一个 Java 的 Socket 服务器和客户端通信的例子
一个 HelloWord 级别的 Java Socket 通信的例子.通讯过程: 先启动 Server 端,进入一个死循环以便一直监听某端口是否有连接请求.然后运行 Client 端,客户端发出连接请 ...
随机推荐
- HttpServletRequest 接口、HttpServletResponse 接口、请求转发与重定向
上篇文章我们讲了servlet的基本原理,这章将讲一下剩余的部分. HttpServletRequest 接口 该接口是 ServletRequest 接口的子接口,封装了 HTTP 请求的相关信息, ...
- js数组中的find(), findIndex(), filter(), forEach(), some(), every(), map(), reduce()方法的详解和应用实例
1. find()与findIndex() find()方法,用于找出第一个符合条件的数组成员.它的参数是一个回调函数,所有数组成员依次执行该回调函数,直到找出第一个返回值为true的成员,然后返回该 ...
- fab 菜单实现—圆形、半圆、扇形、直线、射线
前段时间记录一下fab 菜单实现之前传-钟表表盘,今天终于弄正文了. 本文基于上篇文章的布局方式和位置计算,并参考35 Cool Floating Action Button Animations(h ...
- 解决git Failed to connect to 127.0.0.1 port xxxx: Connection refused
某天,用git拉取,提交代码的时候出现了git Failed to connect to 127.0.0.1 port xxxx: Connection refused的问题, 开始百度,看了一通.都 ...
- SQL Server函数与存储过程 计算时间
一.通过一个开始时间.结束时间计算出一个工作日天数(不包含工作日与节假日): 1.函数 --创建函数,参数 @bengrq 开始时间,@endrq 结束时间 create function [dbo] ...
- 【死磕 Spring】----- IOC 之 Spring 统一资源加载策略
原文出自:http://cmsblogs.com 在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Reso ...
- pycharm配置运行django项目步骤
1:在django项目的跟目录下执行:这是直接在Linux系统中直接运行 python manage.py runserver 0:8000 然后在浏览器中输入IP端口即可访问 pycharm配置运行 ...
- 怎么隐藏 iOS Safari 打开网页时的地址栏和工具栏探索
先来看一张截图 红色框处就是用手机浏览器打开页面时,自动显示出来的头部地址栏和底部工具栏 如果现在有一个需求,用手机浏览器打开页面时,把地址栏和工具栏隐藏,该怎么办呢? 起初我在度娘找到了好几篇博客都 ...
- 使用ASP.NET Core开发GraphQL服务器 -- 预备知识(下)
上一篇文章:https://www.cnblogs.com/cgzl/p/9734083.html 处理数据 嵌套字段 看例子: 我想查看viewer下的repositories.注意里面的edges ...
- PERL学习笔记---正则表达式的应用
使用m//匹配 //这是m//(模式匹配)的一种简写.同qw//操作一样,可以使用任何成对的分隔符.因此,可以使用m(fred), m<fred>, m{fred}, m[fred],或者 ...