[三]、基本概念
1.資料型別
結構體型別:
容器型別:
異常型別:
服務型別:
2.服務端編碼基本步驟:
package service.demo;3.客戶端編碼基本步驟:import org.apache.thrift.tprocessor;
import org.apache.thrift.protocol.tbinaryprotocol;
import org.apache.thrift.protocol.tjsonprotocol;
import org.apache.thrift.server.tthreadedselectorserver;
import org.apache.thrift.transport.tframedtransport;
import org.apache.thrift.transport.tnonblockingserversocket;
import org.apache.thrift.transport.tnonblockingservertransport;
import org.apache.thrift.transport.ttransportexception;
import org.apache.thrift.transport.ttransportfactory;
import service.demo.thrift.hello;
public class helloserviceserver2 catch (ttransportexception e)
}}
同步**:
// 設定呼叫的服務位址為本地,埠為 7911
ttransport transport = new tsocket("localhost", 7911);
transport = new tframedtransport(transport);
transport.open();
// 設定傳輸協議為
tprotocol protocol = new tjsonprotocol(transport);
hello.client client = new hello.client(protocol);
// 呼叫服務的 hellovoid 方法
client.hellovoid();
//非同步**:
tasyncclientmanager clientmanager = new tasyncclientmanager();
tnonblockingsocket transport = new tnonblockingsocket("localhost",
port, 500000);
tjsonprotocol.factory protocolfactory = new tjsonprotocol.factory();
hello.asyncclient asycnclient = new hello.asyncclient(
protocolfactory, clientmanager, transport);
mycallback callback = new mycallback(wait);
asycnclient.hellostring("libin", callback);
synchronized (wait)
asyncclient.hellostring_call msg = callback.getresult();
system.out.println("***************=== async client msg = " + msg);
4.資料傳輸協議
tips:客戶端和服務端的協議要一致
thrift裡面常見的幾種同步非同步用法
thrift客戶端與伺服器之間同步非同步的方法:
客戶端-伺服器
呼叫型別
同步伺服器
非同步伺服器
同步客戶端
同步呼叫
okok
同步客戶端
非同步呼叫
ok(不保證返回結果)
待確認非同步客戶端
---nook
預設使用的是:同步客戶端,同步呼叫,
同步伺服器
同步客戶端,非同步呼叫 ,同步伺服器: thrift框架保證傳輸到位,但應用不保證一定處理完成
需要注意的問題
1. thrift生成的server端是thread safe的. 但是client端不是thread safe. 所以需要多個thread和server端通訊,則每個thread需要initiate乙個自己的client例項.
2. 如果伺服器採用tnonblockingserver的話,客戶端必須採用tframedtransport。程式鏈結的時候需要thriftnb。
3. 預設tserversocket和tsocket都設定了nodelay為1,使得報文盡快傳送出去,如果客戶端和伺服器間傳輸資料量較大,通過可以設定nodelay為0來開啟nagel演算法,快取一段資料後再進行傳送,減少報文數量。
tsocket預設開啟了linger,並設定linger time為0,這樣close會丟棄socket傳送緩衝區中的資料,並向對端傳送乙個rst報文,close不會被阻塞,立即返回。
tserversocket預設關閉了linger,close不會被阻塞,立即返回。
4. fb303作為handler的基類,裡面預置了一些rpc方法,用於監控,包括系統狀態,請求次數等狀態資訊。
thrift開發問題總結
作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在實現的thrift系統中,遇到的各種問題。但是thrift在隱藏一些底層細節的同時,也給應用層帶來了一些不確定性,這些不確定...
thrift開發踩坑全紀錄
使用thrift搭建的系統已經穩定執行了一段時間了,該系統是公司的核心流式系統,高峰時qps在40萬。作為目前最流行的rpc框架,thrift不僅提供了通訊協議,同時提供了網路框架,解脫了程式設計師的生產力。thrift也是阿帕奇hadoop系列的rpc實現工具。本文主要聚焦在搭建c 實現的thri...
Thrift總結 四 Thrift實現雙向通訊
前面介紹過 thrift 安裝和使用,介紹了thrift服務的發布和客戶端呼叫,可以檢視我之前的文章 但是,之前介紹的都是單向的客戶端傳送訊息,服務端接收訊息。而客戶端卻得不到伺服器的響應。那如果我們要實現雙向通訊 即 客戶端傳送請求,服務端處理返回,服務端傳送訊息,客戶端處理返回 的功能,該怎麼實...