導航:首頁 > 編程語言 > thriftjava非同步

thriftjava非同步

發布時間:2022-03-08 23:11:30

『壹』 thrift不是一種rpc框架嗎,為什麼看到有人也用它做序列化

Apache Thrift 跨語言服務框架,本質RPC;我發service需要放候,遇跨語言調用問題,java語言發UserService用提供獲取用戶信息服務,服務消費端php/python/C++等,我能所語言都適配相應調用式,候我奈使用Http作訪問協議;服務消費端能使用HTTP,且更加傾向於 操作本API式 使用服務,我需要Thrift提供支持.
本文UserService例,描述使用thrift式,及其原理..
. service.thrift
struct User{
1:i64 id,
2:string name,
3:i64 timestamp,
4:bool vip
}

service UserService{
User getById(1:i64 id)
}

二. API文件
首先載安裝thrift客戶端,比windows平台,載thrift.exe,處需要提醒,同thrift客戶端版本API能兼容.本例使用thrift-0.9.0.exe;通"--gen"指定API所適配語言.本實例java客戶端API.
//windows平台,API文件輸service目錄(目錄需要存)
> thrift.exe --gen java -o service service.thrift

三. UserService實現類
public class UserServiceImpl implements UserService.Iface {
@Override
public User getById(long id){
System.out.println("invoke...id:" + id);
return new User();//for test
}
}

四.原理簡析
1. User.java : thriftAPI能力非限,比struct能使用簡單數據類型(支持Date,Collection等),我能User看,類實現"Serializable"介面"TBase"介面.
其Serializable介面表明類實例需要序列化網路傳輸,干擾JAVA本身序列化反序列化機制,重寫readObjectwriteObject.thrift本身並沒幫助.
TBase介面thrift序列化反序列化使用,兩核:readwrite.述thrift文件,struct定義每屬性都序號,比:1:id,thrift序列化,根據序號順序依屬性"名稱 + 值"寫入inputStream,反序列化.(具體參見readwrite實現).
thrift序列化反序列化實例數據,根據"屬性序號"進行,保證數據inputstreamoutputstream順序嚴格.點要求API發者,更改thrift文件struct定義,需要重新客戶端API,否則服務繼續使用(能報錯,能數據錯誤).thrift序列化/反序列化程JAVA自帶序列化機制同,攜帶額外class結構,外thrift種序列化機制更加適合網路傳輸,且性能更加高效.
2. UserService.Client: UserService,Client靜態類,類典型代理類,類已經實現UserService所.發者需要使用Client類API與Thrift server端交互,負責與Thrift serverSocket鏈接,發送請求接收響應.

『貳』 thrift封裝了一個java的服務,可以使用python的客戶端訪問嗎

最近用Python做網頁的抓取,因為想得到JS解釋後的HTML,先後嘗試了selenium,windmill,htmlunit等web測試框架,因為只要得到html不需要界面展現,最後選擇了htmlunit,而htmlunit只有Java的實現,所以考慮用RPC來進行python與JAVA的連接
最開始試用了一下ICE,JAVA端無問題,在用python做client的時候,發現ICE現在還不支持python2.7,放棄,再來看看thrift!

『叄』 怎樣寫thrift介面 java

要編寫Thrift定義文件,肯定要熟悉Thrift常見的數據類型:
1.基本類型(括弧內為對應的Java類型):
bool(boolean): 布爾類型(TRUE or FALSE)
byte(byte): 8位帶符號整數
i16(short): 16位帶符號整數
i32(int): 32位帶符號整數
i64(long): 64位帶符號整數
double(double): 64位浮點數
string(String): 採用UTF-8編碼的字元串
2.特殊類型(括弧內為對應的Java類型):
binary(ByteBuffer):未經過編碼的位元組流
3.Structs(結構):
struct定義了一個很普通的OOP對象,但是沒有繼承特性。

struct UserProfile {
1: i32 uid,
2: string name,
3: string blurb
}

如果變數有默認值,可以直接寫在定義文件里:

struct UserProfile {
1: i32 uid = 1,
2: string name = "User1",
3: string blurb
}

4.容器,除了上面提到的基本數據類型,Thrift還支持以下容器類型:
list(java.util.ArrayList):
set(java.util.HashSet):
map(java.util.HashMap):
用法如下:

struct Node {
1: i32 id,
2: string name,
3: list<i32> subNodeList,
4: map<i32,string> subNodeMap,
5: set<i32> subNodeSet
}

包含定義的其他Object:

struct SubNode {
1: i32 uid,
2: string name,
3: i32 pid
}
struct Node {
1: i32 uid,
2: string name,
3: list<subNode> subNodes
}

5.Services服務,也就是對外展現的介面:

service UserStorage {
void store(1: UserProfile user),
UserProfile retrieve(1: i32 uid)
然後實現這個介面就好了啊。

『肆』 java thrift 檢測是否有效

java 和 python 屬於不同的進程,你這個是進程間通信。進程間通信的常見方法是通過網路,比如用 tcp 。 目前常見的跨語言 RPC 方案有 ZeroMQ protobuf 、Thrift 等。 如果你是新手,我只能說不同的語言之間是不能隨便互相調用的。

『伍』 thrift1.0支持異構容器嗎,想用它定義Java的一個Object數組,不知道怎麼實現啊

publicclassObjectArray{
publicstaticvoidmain(String[]args){
Object[]array=newObject[5];
Rectrect=newRect(3,4);//矩形
array[0]=rect;
Circlecircle=newCircle(7,3.14);//圓
array[1]=circle;
Doubled=newDouble(5.2);//雙精度小數
array[2]=d;
Floatf=newFloat(5.2);//單精度小數
array[3]=f;
Integeri=newInteger(7);//整數
array[4]=i;
for(Objecto:array){
System.out.println(o);
}
}
}
classRect{
privatedoublelength;//長
privatedoublewidth;//寬
publicRect(){
super();
}
publicRect(doublelength,doublewidth){
super();
this.length=length;
this.width=width;
}
publicdoublegetLength(){
returnlength;
}
publicvoidsetLength(doublelength){
this.length=length;
}
publicdoublegetWidth(){
returnwidth;
}
publicvoidsetWidth(doublewidth){
this.width=width;
}
//計算面積
publicdoublegetArea(){
returnthis.length*this.width;
}
@Override
publicStringtoString(){
return"Rect[length="+length+",width="+width+"]";
}
}
classCircle{
privatedoubler;//半徑
privatedoublepi;
publicdoublegetR(){
returnr;
}
publicvoidsetR(doubler){
this.r=r;
}
publicCircle(){
}
publicCircle(doubler){
this.r=r;
}
publicdoublegetPi(){
returnpi;
}
publicvoidsetPi(doublepi){
this.pi=pi;
}
publicCircle(doubler,doublepi){
this.r=r;
this.pi=pi;
}
//計算面積
publicdoublegetArea(){
returnpi*Math.pow(r,2);
}
//計算周長
publicdoublegetZhouChang(){
return2*pi*r;
}
@Override
publicStringtoString(){
return"Circle[r="+r+",pi="+pi+"]";
}
}

『陸』 thrift java 只能在linux環境下安裝嗎

純java開發的軟體在linux下面也可以應用自如。那麼首先就需要配置好linux下的java環境,具體說來,就是配置jdk環境變數。 介紹在linux下配置jdk環境變數的幾種常用方法。 首先在linux下安裝jdk,如果出現提示許可權不夠(且root下也提示許可權不夠),...

『柒』 找一下怎麼根據thrift文件生成java需要使用的類

提供一種命令行的方式,利用axis——下載一個axis,假設2-1.5版本,解壓運行cmd,進入axis的bin目錄,執行如下命令:axis2-1.5\bin>wsdl2java.bat-uriD:\wsdl.xml-oD:\output-pcom.bd.zd-uri:wsdl文件-o:Java文件輸出路徑-p:生成的Java文件包名

『捌』 thrift非同步客戶端怎麼結束調用

首先創建thrift文件

namespace Java thriftservice Hello{ string helloString(1:string para)}
執行thrift -gen Java test.thrift會生成一個Hello.java文件
將Hello.java文件拷貝至IDE
server端代碼:

[java] view plain

[java] view plain
package com.thrift.test.thrift;

import org.apache.thrift.TProcessorFactory;
import org.apache.thrift.protocol.TCompactProtocol;
import org.apache.thrift.server.THsHaServer;
import org.apache.thrift.server.TServer;
import org.apache.thrift.transport.TFramedTransport;
import org.apache.thrift.transport.TNonblockingServerSocket

『玖』 thrift c++ 服務端的非同步怎麼實現

仰望明天

thrift服務端的c++語言實現
1.thrift 概念1
thrift是一個軟體框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟體堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。
thrift最初由facebook開發,07年四月開放源碼,08年5月進入apache孵化器。
thrift允許你定義一個簡單的定義文件中的數據類型和服務介面。以作為輸入文件,編譯器生成代碼用來方便地生成RPC客戶端和伺服器通信的無縫跨編程語言。
2.生成c++語言的thrift服務端
利用thrift軟體框架進行開發要首先進行環境的搭建,安裝thrift運行庫。
基本流程如下:
1)定義數據類型和服務介面文件:test.thrift;
2)利用代碼生成引擎生成服務端框架,thrift --gen cpp test.thrift;
3)在./gen-cpp/test_server.skeleton.cpp文件中添加定製的服務;
4)編寫客戶端程序向服務端請求服務。
詳細過程可以參加註釋2給出的鏈接地址。
thrift定義了自己的數據類型,從而實現了跨語言平台之間的數據交換,關於thrift數據類型的詳細說明可以參加註釋3給出的鏈接地址。
3.php客戶端
基於c++語言實現的thrift服務端程序經常被用在網站的後台提供實時且高效的服務,通常客戶端程序是php語言的實現版本。只要根據數據類型和服務介面文件test.thrift生成php語言的介面文件即可用來調用。方法是thrift --gen php test.thrift,調用該命令後會在工作目錄下生成./gen-php目錄,裡面有php語言的介面文件。
注釋:

閱讀全文

與thriftjava非同步相關的資料

熱點內容
優信二手車解壓後過戶 瀏覽:62
Windows常用c編譯器 瀏覽:778
關於改善國家網路安全的行政命令 瀏覽:833
安卓如何下載網易荒野pc服 瀏覽:654
javainetaddress 瀏覽:104
蘋果4s固件下載完了怎麼解壓 瀏覽:1003
命令zpa 瀏覽:286
python編譯器小程序 瀏覽:945
在app上看視頻怎麼光線調暗 瀏覽:540
可以中文解壓的解壓軟體 瀏覽:593
安卓卸載組件應用怎麼安裝 瀏覽:913
使用面向對象編程的方式 瀏覽:339
程序員項目經理的年終總結範文 瀏覽:929
內衣的加密設計用來幹嘛的 瀏覽:433
淮安數據加密 瀏覽:292
魔高一丈指標源碼 瀏覽:982
松下php研究所 瀏覽:168
c回調java 瀏覽:401
夢幻端游長安地圖互通源碼 瀏覽:746
電腦本地文件如何上傳伺服器 瀏覽:313