thrift服务端到客户端开发简单示例

(1)首先我们在服务器端写个helloworld.thrift文件,如下所示:

service HelloWorld{
string ping(1: string name),
string getpng(),
}

(2)在服务器端编译helloworld.thrift
编译helloworld.thrift文件,会产生服务器端和客户端相应语言的接口源码。
/usr/local/thrift/bin/thrift -r --gen py helloworld.thrift
/usr/local/thrift/bin/thrift -r --gen php helloworld.thrift
#会在当前目录下生成 gen-* 目录。
产生的gen-py目录放在服务器上,产生的gen-php目录放在客户端上。

(3)编写服务器端代码

import sys
sys.path.append(‘./gen-py‘)

from helloworld import HelloWorld
from helloworld.ttypes import *

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer

class HellowordHandler:
def __init__ (self):
pass

def ping (self, name):
print name + ‘ from server.‘
return "%s from server." % name
def getpng (self):
f = open("./logo.png", "rb")
c = f.read()
f.close()
return c
handler = HellowordHandler()
processor = HelloWorld.Processor(handler)
transport = TSocket.TServerSocket(9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()

server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

# You could do one of these for a multithreaded server
#server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
#server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)

print ‘Starting the server...‘
server.serve()
print ‘done.‘

(4)编写客户端代码
先将gen-php目录拷贝到客户端上。

<?php
try{
//包含thrift客户端库文件
$GLOBALS[‘THRIFT_ROOT‘] = ‘/root/thrift-0.9.0/lib/php/lib/Thrift‘;
require_once ‘/root/thrift-0.9.0/lib/php/src/Thrift.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Protocol/TBinaryProtocol.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Transport/TSocket.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Transport/THttpClient.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Transport/TBufferedTransport.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Type/TType.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Type/TMessageType.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Factory/TStringFuncFactory.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/StringFunc/TStringFunc.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/StringFunc/Core.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Exception/TException.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Exception/TProtocolException.php‘;
require_once $GLOBALS[‘THRIFT_ROOT‘].‘/Exception/TTransportException.php‘;

error_reporting(E_NONE);

//包含helloworld接口文件
$GEN_DIR = ‘./gen-php‘;
require_once $GEN_DIR.‘/helloworld/HelloWorld.php‘;

error_reporting(E_ALL);

$socket = new TSocket(‘*.*.*.*‘, 9090);
$transport = new TBufferedTransport($socket, 1024, 1024);
$protocol = new TBinaryProtocol($transport);
$client = new HelloWorldClient($protocol);

$transport->open();

$a = $client->ping(‘xyq ‘);
echo $a;

$transport->close();

}catch(TException $tx){
print ‘TException: ‘.$tx->getMessage()."/n";
}

?>

时间: 2024-10-23 01:54:21

thrift服务端到客户端开发简单示例的相关文章

webService服务端和客户端开发 简单实例

这几天一直在看webService相关的知识. webService是一个跨平台访问的第三方插件,方便易用,多平台使用. 开发中我们可能自己是服务端,提供webService接口给别人访问我们的系统:也有可能我们调用别人的webService接口去访问别人的系统(比如查询天气预报). 下面是服务端和客户端的开发,实际开发中我们只是其中一方. 服务端开发: ①创建一个服务类,运行main方法发布即可,服务端就开发完成了. package com.lijianbo.service; import j

python thrift 服务端与客户端使用

一.简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的.高效的服务. 二.安装 1.下载地址 http://www.apache.org/dyn/closer.cgi?path=/thrift

C# 编写WCF简单的服务端与客户端

http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术.是Windows平台上开发分布式应用最佳的实践方式. 今天带如何一步一步实现WCF服务端与客户端的开发及基础讲解. 一.在Visual

grpc(3):使用 golang 开发 grpc 服务端和客户端

1,关于grpc-go golang 可以可以做grpc的服务端和客户端. 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同.也需要使用protobuf的配置文件. 但是golang下面的类库非常的简单,而且golang的性能也很强悍呢. 有些简单的业务逻辑真的可以使用golang进行开发. 性能强悍而且,消耗的资源也很小.java感觉上已

使用Apache CXF开发WebServices服务端、客户端

在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = Celtix + XFire. CXF 继承了 Celtix 和 XFire 两大开源项目的精华, 提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code Fi

Unity使用C#实现简单Scoket连接及服务端与客户端通讯

简介: 网络编程是个很有意思的事情,偶然翻出来很久之前刚开始看Socket的时候写的一个实例,贴出来吧 Unity中实现简单的Socket连接,c#中提供了丰富的API,直接上代码. 服务端代码: [csharp] view plain copyThread connectThread;//当前服务端监听子线程 public string address;//当前地址 public int port;//当前本地端口 TcpClient romoteClient;//远程客户端 // Use t

网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

UDP协议 (了解) 称之为数据包协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需先启动服务端再启动客户端 优点: - 传输速度快 - 能支持并发 - 不会粘包 缺点: - 数据不安全, 容易丢失 应用场景: 早期的QQ聊天室. # server端 import socket # socket.SOCK_DGRAM ---> UPD协议 server = socket.socket(type=s

python的flex服务端数据接口开发

python的flex服务端数据接口开发 python 如果给flex提供服务端,需要提供一个网关和一个可供客户端(flex)调用的类.这方面我更加推荐用twisted来写这个网关,因为twisted有很好的异步机制. 下面的我写的一个简单的验证用户的python服务端: ______________________________DBServer.py # Copyright (c) 2009-2010 The Newjh Project."""@author: Roy@s

(转)SVN 服务端、客户端安装及配置、导入导出项目

SVN服务器搭建和使用(一) Subversion是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说. 首先来下载和搭建SVN服务器. 现在Subversion已经迁移到apache网站上了,下载地址: http://subversion.apache.org/packages.html 这是二进制文件包的下载地址,你可在左侧的导航栏找到源代码,文档的下载地址. windows操作系统下面的二进制文件包一共有5种,如图: 个人认为最好用VisualSVN server 服务端和 To