当前位置:网站首页>thrift简单使用
thrift简单使用
2022-06-30 09:32:00 【Zip-List】
git clone https://github.com/apache/thrift.git
//官网readme.md
安装
安装bison flex包
https://blog.csdn.net/Tosonw/article/details/102640385
openssl/opensslv.h: No such file or directory
sudo apt-get install libssl-dev
thriftl.cc找不到
thrift updating lex.yythrift/thriftl.cc mv: cannot move ‘tmp-thriftl.cc’ to ‘…/lex.yythrift/thriftl.cc’: No such file or directory
https://github.com/sunchao/parquet-rs/issues/74
重新./boosttrap.sh + ./configure
make
make install
thrift --version
简单使用
https://diwakergupta.github.io/thrift-missing-guide/
https://blog.csdn.net/tuwenqi2013/article/details/105541475
---gen-cpp
---Serv_server.skeleton.cpp
---Serv.cpp
---Serv.h
---student_types.cpp
---student_types.h
cleint.cpp
server.cpp
student.thrift
1 定义thrift文件
student.thrift
使用, 且没有;
struct Student{
1: i32 sno,
2: string sname,
3: bool ssex,
4: i16 sage,
}
service Serv{
void put(1: Student s),
}
thrift -r --gen cpp student.thrift 生成gen-cpp文件夹
- 没有教程中的xxx_constant.cpp文件是因为thrift定义中没有const常量,不影响
- 生成文件Serv_server.skeleton.cpp中类似svr部分代码,不用处理,不会在生成的文件夹中写逻辑
2 server.cpp/client.cpp
server 实现put函数的handler
// This autogenerated skeleton file illustrates how to build a server.
// You should copy it to another filename to avoid overwriting it.
#include "gen-cpp/Serv.h""
#include <thrift/protocol/TBinaryProtocol.h>
#include <thrift/server/TSimpleServer.h>
#include <thrift/transport/TServerSocket.h>
#include <thrift/transport/TBufferTransports.h>
using namespace ::apache::thrift;
using namespace ::apache::thrift::protocol;
using namespace ::apache::thrift::transport;
using namespace ::apache::thrift::server;
class ServHandler : virtual public ServIf {
public:
ServHandler() {
// Your initialization goes here
}
void put(const Student& s) {
// Your implementation goes here
printf("put\n");
printf("name:%s\n", s.sname.c_str());
printf("sex:%d\n", s.ssex);
}
};
int main(int argc, char **argv) {
int port = 9090;
::std::shared_ptr<ServHandler> handler(new ServHandler());
::std::shared_ptr<TProcessor> processor(new ServProcessor(handler));
::std::shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
::std::shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
::std::shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
TSimpleServer server(processor, serverTransport, transportFactory, protocolFactory);
server.serve();
return 0;
}
client 与对应的handler服务器建立连接,进行远程调用
#include "gen-cpp/Serv.h"
#include </usr/local/include/thrift/transport/TSocket.h>
#include </usr/local/include/thrift/transport/TBufferTransports.h>
#include </usr/local/include/thrift/protocol/TBinaryProtocol.h>
#include <iostream>
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
//using boost::shared_ptr;
int main(int argc, char **argv) {
std::shared_ptr<TSocket> socket(new TSocket("127.0.0.1", 9090));
std::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
std::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
transport->open();
//*****************添加部分******************
Student s;
s.sno = 123;
s.sname = "xiaoshe";
s.ssex = 1;
s.sage = 30;
ServClient client(protocol);
std::cout<<"client send a data"<<std::endl;;
client.put(s);
//*****************添加部分******************
transport->close();
return 0;
}
3 编译
g++ -g -o server -Ithrift ./gen-cpp/Serv.cpp ./gen-cpp/student_types.cpp server.cpp -lthrift
g++ -g -o client -Ithrift ./gen-cpp/Serv.cpp ./gen-cpp/student_types.cpp client.cpp -lthrift
cannot find libthrift.so
ldd ./server
sudo find / -name libthrift-0.17.0.so 看看是不是有这个文件
1、在usr/lib目录下有这些库文件
直接修复以下链接即可,例如依次执行
ln -s lib***.so.6(某个数字) lib***.so
2、在usr/lib目录下没有这些文件
直接在系统根目录中依次搜索这些库文件,并使用
sudo cp 库文件名 /usr/lib
命令将相应库文件拷贝到该目录中即可
边栏推荐
- Talk about the kotlin cooperation process and the difference between job and supervisorjob
- Application of hongruan face recognition
- Pass anonymous function to simplification principle
- 5. Messager framework and imessager interface
- Applet learning path 2 - event binding
- Pipe pipe --namedpipe and anonymouspipe
- asdsadadsad
- Esp32 (7): I2S and I2C drivers for function development
- I once met a girl whom I most wanted to take care of all my life. Later... No later
- Tablet PC based ink handwriting recognition input method
猜你喜欢

The elegant combination of walle and Jianbao

Talk about the kotlin cooperation process and the difference between job and supervisorjob

Cb/s Architecture - Implementation Based on cef3+mfc

JVM garbage collector G1 & ZGC details

Bottomsheetbehavior principle of realizing the home page effect of Gaode map

Express の Hello World

Electron, which can wrap web page programs into desktop applications

八大排序(二)

JVM notes (III): analysis of JVM object creation and memory allocation mechanism

So the toolbar can still be used like this? The toolbar uses the most complete parsing. Netizen: finally, you don't have to always customize the title bar!
随机推荐
JVM tuning tool commands (notes)
Deep understanding of continuation principle
The elegant combination of walle and Jianbao
Tablet PC based ink handwriting recognition input method
Six implementation methods of singleton mode
(zero) most complete JVM knowledge points
Esp32 things (x): other functions
Design of mfc+mysql document data management system based on VS2010
Express の Hello World
Initialize static resource demo
List set export excel table
Review the old and know the new
Installation, use and explanation of vulnerability scanning tool OpenVAS
Dart asynchronous task
Pipe pipe --namedpipe and anonymouspipe
Talking about kotlin process exception handling mechanism
Express get request
Talk about the kotlin cooperation process and the difference between job and supervisorjob
7. know JNI and NDK
Talk about the job experience of kotlin cooperation process