惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
A
About on SuperTechFans
J
Java Code Geeks
G
Google Developers Blog
L
LangChain Blog
小众软件
小众软件
宝玉的分享
宝玉的分享
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
博客园 - 【当耐特】
IT之家
IT之家
F
Fortinet All Blogs
aimingoo的专栏
aimingoo的专栏
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
V
V2EX
博客园 - Franky
博客园_首页
雷峰网
雷峰网
Microsoft Security Blog
Microsoft Security Blog
Vercel News
Vercel News
B
Blog
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - Lil-K

VM-16-pro 安装Centos Stream 9 spring-cloud-alibaba-整合spring-cloud-gateway-3.1.4 基于CentOS7.x安装Nginx-1.18.0 Nginx在Windows下的基本介绍安装以及基本使用 window7下 cmd命令行 Mysql导出表结构 + 表数据 【一】Spark基础 【二】Spark 核心 【八】将日志写入log(glog) - Lil-K - 博客园 【七】ab压测 【六】tf和cgi进行联合试验,完成日志服务器 - Lil-K - 博客园 【五】安装fcig - Lil-K - 博客园 【四】搭建Nginx服务器 - Lil-K - 博客园 【二】调通单机版的thrift-C++版本 - Lil-K - 博客园 【一】调通单机版的thrift-python版本 - Lil-K - 博客园 Spark在实际项目中分配更多资源 - Lil-K - 博客园 Spark实际项目中调节并行度 - Lil-K - 博客园 IDEA中大小写转换快捷键 使用maven下载cdh版本的大数据jar包 【Hive六】Hive调优小结 - Lil-K - 博客园
【三】多语言互通 - Lil-K - 博客园
Lil-K · 2018-08-15 · via 博客园 - Lil-K

---恢复内容开始---

# 【任务3】多语言互通

说明

client:python
server:c++

server端

命令:thrift --gen cpp RecSys.thrift
自动生成gen-cpp目录,这个目录下的代码仅完成server功能

进入gen-cpp目录之后编译server端,命令:g++ -g -Wall -I./ -I/usr/local/include/thrift RecSys.cpp RecSys_constants.cpp RecSys_types.cpp RecSys_server.skeleton.cpp -L/usr/local/lib/*.so -lthrift -o server

gen-cpp/RecSys_server.skeleton.cpp文件中修改的内容:

void rec_data(std::string& _return, const std::string& data) {
    // Your implementation goes here
    printf("=======================\n");
    std::cout << "receive client data:" << data << std::endl;

    std::string ack = "yeah,I love you too!!";
    _return = ack;
  }

client端(python)

  • 创建py文件:client.py

  • 代码:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import sys
sys.path.append("gen-py")

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

from RecSys import RecSys
# from demo.ttypes import *

try:
    # Make Socket
    # 建立socket, IP 和port要写对
    transport = TSocket.TSocket('localhost', 9090)

    # Buffering is critical. Raw sockets are very slow
    # 选择传输层,这块要和服务器的设置一样
    transport = TTransport.TBufferedTransport(transport)

    # Wrap in a protocol
    # 选择传输协议,这个也要和服务器保持一致,负责无法通信
    protocol = TBinaryProtocol.TBinaryProtocol(transport)

    client = RecSys.Client(protocol)

    # Connect!
    transport.open()

    # Call server services
    rst = client.rec_data("I love you!")
    print rst

    # close transport
    transport.close()
except Thrift.TException, ex:
    print "%s" % (ex.message)

执行结果

  1. 首先启动server端:./server

  2. 然后执行client端:python client.py

  3. 结果:两端能够接受到互相发送的信息

client端(C++)

  • 创建c++文件:client.cpp

  • 第一版代码:

#include "RecSys.h"
#include <iostream>
#include <string>

#include <transport/TSocket.h>
#include <transport/TBufferTransports.h>
#include <protocol/TBinaryProtocol.h>

#include <fcgi_stdio.h>
#include <fcgiapp.h>

using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;

using namespace std;
using std::string;
using boost::shared_ptr;

int main(int argc, char **argv){

    boost::shared_ptr<TSocket> socket(new TSocket("localhost",9090));
    boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
    boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));

    transport->open();

    RecSysClient client(protocol);
    
    string send_data = "I love you!!!";

    string receive_data;

    client.rec_data(receive_data,send_data);

    cout << "receive server data: " << receive_data << endl;
    
    transport->close();
    return 0;
}
  • 编译c++版的client:
    命令:编译client: g++ -g -Wall -I./ -I/usr/local/include/thrift RecSys.cpp client.cpp -L/usr/local/lib/*.so -lthrift -o client

  • 完成之后会自动生成client可执行文件文件

运行结果

  1. 首先启动server端:./server

  2. 然后启动编译后的client端:./client

  3. 结果:两端能够接受到互相发送的信息

编译技巧(make操作)

  1. 创建名为:Makefile的文件

  2. Makefile文件中写入以下内容:

server:
	g++ -g -Wall -I./ -I/usr/local/include/thrift RecSys.cpp RecSys_constants.cpp RecSys_types.cpp RecSys_server.skeleton.cpp -L/usr/local/lib/*.so -lthrift -o server

client:
	g++ -g -Wall -I./ -I/usr/local/include/thrift RecSys.cpp client.cpp -L/usr/local/lib/*.so -lthrift -o client
  1. 写入完成后就可以执行make命令来进行编译文件了,默认make编译server端,因为serverMakefile中写在前面,也可以选择编译,命令:make server或者make client

    ---恢复内容结束---