日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

server如何调用 thrift_Thrift入门很简单

發(fā)布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 server如何调用 thrift_Thrift入门很简单 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Thrift是什么?

是Facebook開源的跨語言RPC框架。

實戰(zhàn)

這里實現(xiàn)一個簡單的服務CalculatorService。引入maven依賴

org.apache.thrift

libthrift

0.9.2

編寫Thrift接口定義文件

Thrift接口定義(IDL)文件采用抽象注解的方式說明類型信息,用于告知thrift代碼生成器如何生成相應語言的接口或者方法聲明。

namespace java com.vonzhou.learn.rpc

service CalculatorService {

/*** A method definition looks like C code. It has a return type, arguments,* and optionally a list of exceptions that it may throw. Note that argument* lists and exception lists are specified using the exact same syntax as* field lists in struct or exception definitions.*/

void ping(),

i32 add(1:i32 num1, 2:i32 num2),

}使用Thrift compiler根據(jù)IDL文件生成對應的源文件

這里僅僅配置了Java命名空間,運行上述命令后會生成CalculatorService.java文件。實現(xiàn)服務接口CalculatorService.Iface

public class CalculatorServiceHandler implements CalculatorService.Iface{

public void ping() throws TException {

System.out.println("ping");

}

public int add(int num1, int num2) throws TException {

return num1 + num2;

}

}實現(xiàn)Thrift Server

public class ThriftServer {

public static void start(CalculatorService.Processor processor) {

try {

/*** 服務器端傳輸層初始化*/

TServerTransport serverTransport = new TServerSocket(9090);

/*** Thrift Server 這里采用簡單單線程實現(xiàn), 用于測試環(huán)境*/

TServer server = new TSimpleServer(new TServer.Args(serverTransport).processor(processor));

System.out.println("Starting the simple thrift server...");

/*** 啟動服務*/

server.serve();

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

start(new CalculatorService.Processor(new CalculatorServiceHandler()));

}

}實現(xiàn)Thrift Client

public class ThriftClient {

public static void main(String[] args) {

try {

TTransport transport = new TSocket("localhost", 9090);

/*** Opens the transport for reading/writing.*/

transport.open();

/*** 指定具體的 protocol*/

TProtocol protocol = new TBinaryProtocol(transport);

/*** TServiceClient :通過 protocol 和 transport 與具體的服務通信,理解為 Stub*/

CalculatorService.Client client = new CalculatorService.Client(protocol);

/*** RPC call*/

System.out.println(client.add(100, 200));

transport.close();

} catch (TTransportException e) {

e.printStackTrace();

} catch (TException x) {

x.printStackTrace();

}

}

}

理解

TTransport:IO層的封裝抽象,打開關閉,讀寫傳輸層,TTransport具體對應有不同的實現(xiàn):

TServerTransport:服務器端IO層抽象,用于listen, accept連接請求。

TSocket:是TTransport基于socket的實現(xiàn),同樣的,TServerSocket是TServerTransport 基于socket的實現(xiàn), 是Thrift中對ServerSocket的包裝。

TProtocol:表示RPC通信的消息傳輸格式,實現(xiàn)有二進制(TBinaryProtocol),JSON(TJSONProtocol)格式等。

參考

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的server如何调用 thrift_Thrift入门很简单的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。