基于thrift的java和python分别作为客户端和服务端的调用实现

前面已经实现了纯java的thrift的实现。

现在实现实现一下python作为客户端和服务端的thrift的调用

1.python作为客户端,java作为服务端

java服务端代码参考前面写的博客

客户端python的准备:

1.使用mac下的PyCharm,专业的python开发工具

2.生成python代码

thrift --gen py thrift/data.thrift

3.在mac下安装thrift的python依赖

sudo python setup.py install 安装thrift的python依赖

4.查看安装依赖的路径

安装的路径:/Library/Python/2.7/site-packages

python客户端代码 :

# -*- coding:utf-8 -*-
__author__ = ‘作者‘
//导入thrift生成的业务代码
from py.com.fubin.netty import PersonService
from py.com.fubin.netty import ttypes
//导入thrift框架的代码
from thrift import Thrift
from thrift.transport import  TSocket
from thrift.transport import  TTransport
from thrift.protocol import   TCompactProtocol
//解决中文乱码问题
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8 ‘)

try:
    tSocket = TSocket.TSocket("localhost",8899)
    tSocket.setTimeout(600)

    transport = TTransport.TFramedTransport(tSocket)
    protocol = TCompactProtocol.TCompactProtocol(transport)
    client = PersonService.Client(protocol)

    transport.open()
    person = client.getPersonByUsername("zhangsan")
    print person.username
    print person.age
    print person.married

    print ‘=======================‘

    newPerson = ttypes.Person()
    newPerson.username = "付彬"
    newPerson.age = 11
    newPerson.married = True

    client.savePerson(newPerson)

    transport.close()

except Thrift.TException , tx:
    print ‘%s‘ % tx.message

中文乱码问题:导入系统库

import sys
reload(sys)
sys.setdefaultencoding(‘utf-8 ‘)

python作为服务端

1.编写业务接口类

# -*- coding:utf-8 -*-
__author__ = ‘作者‘

from py.com.fubin.netty import ttypes

class PersonServiceImpl :

    def getPersonByUsername(self,username):
        print  "got client param :" +username

        person = ttypes.Person()
        person.username = username
        person.age = 112
        person.married = True

        return person

    def savePerson(self ,person):
        print  "got client param : "

        print person.username
        print person.age
        print person.married

编写服务端初始化类:

# -*- coding:utf-8 -*-
__author__ = ‘作者‘

from py.com.fubin.netty import PersonService
from PythonServiceImpl import  PersonServiceImpl
from py.com.fubin.netty import ttypes

from thrift import Thrift
from thrift.transport import  TSocket
from thrift.transport import  TTransport
from thrift.protocol import   TCompactProtocol
from thrift.server import  TServer

import sys
reload(sys)

sys.setdefaultencoding(‘utf-8 ‘)

try:

    personServiceHandler = PersonServiceImpl()
    processor = PersonService.Processor(personServiceHandler)

    serverSocket = TSocket.TServerSocket(port=8899)
    transportFactory = TTransport.TFramedTransportFactory()
    protocolFactory = TCompactProtocol.TCompactProtocolFactory()

    server = TServer.TSimpleServer(processor,serverSocket,transportFactory,protocolFactory)
    server.serve()

except Thrift.TException , tx:
    print ‘%s‘ % tx.message

到这里,一个简单的python实现的thrift调用例子就完成了。

不积跬步,无以至千里,每天进步一点点。

时间: 2024-10-26 09:37:34

基于thrift的java和python分别作为客户端和服务端的调用实现的相关文章

[Java]命令行模拟TCP客户端与服务端的简单小程序遇到的问题(基础不牢!扎实和亲手实践比什么都重要!)

简单得不能再简单的需求: 简单模拟TCP客户端与服务端的一次连接和通信,客户端发出一个消息,服务端回馈一个消息 自己第一次编写的代码: Client: class TcpClient1 { public static void main(String[] args) throws Exception { Socket s=new Socket("127.0.0.1",10010); OutputStream out=s.getOutputStream(); out.write(&quo

python实现一个客户端与服务端的通信

函数介绍 Socket对象方法: 服务端: 函数 描述 .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址.常用bind((host,port)) .listen() 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可 .accept() 被动接受TCP客户端的连接 客户端: 函数 描述 .connect() 初始化服务器连接 .connect_ex() 是对connect()函数的扩展,当出错时返回出错码,不报异常 其它函数: 函数 描述 .recv() 接收数据

Python socket编程客户端与服务端通信

目标:实现客户端与服务端的socket通信,消息传输. 客户端 客户端代码: from socket import socket,AF_INET,SOCK_STREAM #服务端的ip地址 server_ip = '127.0.0.1' #服务端socket绑定的端口号 server_port = 20000 if __name__ == '__main__': while True: str_msg = input("请输入要发送信息:") if str_msg != "&

DatagramSocket客户端与服务端Java实例

1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSocket; 4 import java.net.InetAddress; 5 6 public class TimeClient_UDP{ 7 public static void main(String args[]) throws IOException{ 8 String host = "localhost&

java网络编程客户端与服务端原理以及用URL解析HTTP协议

常见客户端与服务端 客户端: 浏览器:IE 服务端: 服务器:web服务器(Tomcat),存储服务器,数据库服务器. (注:会用到Tomact服务器,在webapps下有一个自己创建的目录myweb,下面有一个文件1.html) 服务端原理 自定义一个服务端,使用自己已有的客户端IE浏览器,了解一下客户端都发送了什么请求. 1 package cn.ie_server; 2 3 import java.io.IOException; 4 import java.io.InputStream;

java自动化测试成长日记-之CVS客户端和服务端安装和部署1:CVS服务端的配置和基本使用

CVS服务端的配置和基本使用 在做java自动化测试集成环境搭建的时候,无论怎样,你都会选择一个源代码管理工具,如:SVN,CVS,VSS等:但如果你使用Eclipse工具,建议你使用CVS源代码管理工具,因为它本身就自带了CVS客户端插件,可以直接使用(具体使用情况,可参考:java自动化测试成长日记-之CVS客户端和服务端安装和部署2:CVS客户端的配置和基本使用章节): 首先,你需要下载:cvsnt-2.5.03.2151安装包.msi,服务端安装软件(可在百度里面搜索找到,相应的资源).

java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并

实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request请求机制,根据请求是注册还是登录,分别进行相应response,客户端根据相应内容判断下一步操作. 发送信息的模式还较为原始,没有使用json方法,但gson包已经导入,支持发送键值对的字符串,及自动解析. 登录对话框LoginDialog类代码如下: package com.swift.frame

Python socket模块实现TCP服务端客户端

Python socket模块实现TCP服务端客户端 写了详细的注释,如果有哪一行不明白,可留言哦. 服务端脚本 # _*_ coding: utf-8 _*_ __author__ = 'xiaoke' __date__ = '2018/6/13 14:39' # 这个脚本创建一个TCP服务器,它接收来自客户端的消息,然后将消息加上时间戳前缀并返回客户端 import socket from time import ctime HOST = '' PORT = 21567 BUFSIZ = 4

linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

单客户端和服务端的通信(基于UDP)   代码 服务端代码socket3.c #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> #include<unistd.h> #include<stdlib.h> #include<stdio.h> #include<string.h> #in