国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Thrift-簡單實用

codergarden / 2935人閱讀

摘要:安裝作用跨語言調用,打破不同語言之間的隔閡。跨項目調用,微服務的么么噠。示例前提版本的版本版本版本說明該示例包含三種語言。

簡介
The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, OCaml and Delphi and other languages.

Apache Thrift是一個軟件框架,用來進行可擴展跨語言的服務開發,結合了軟件堆棧和代碼生成引擎,用來構建C++,Java,Python...等語言,使之它們之間無縫結合、高效服務。

安裝
brew install thrift
作用
跨語言調用,打破不同語言之間的隔閡。
跨項目調用,微服務的么么噠。
示例 前提

thrift版本:

Go的版本、Php版本、Python版本:

說明

該示例包含python,php,go三種語言。(java暫無)

新建HelloThrift.thrift

進入目錄

cd /Users/birjemin/Developer/Php/study-php

編寫HelloThrift.thrift

vim HelloThrift.thrift

內容如下:

namespace php HelloThrift {
  string SayHello(1:string username)
}
Php測試

加載thrift-php庫

composer require apache/thrift

生成php版本的thrift相關文件

cd /Users/birjemin/Developer/Php/study-php
thrift -r --gen php:server HelloThrift.thrift

這時目錄中生成了一個叫做gen-php的目錄。

建立Server.php文件

registerDefinition("HelloThrift",$GEN_DIR);
$loader->register();

class HelloHandler implements HelloThriftHelloServiceIf
{
    public function SayHello($username)
    {
        return "Php-Server: " . $username;
    }
}

$handler   = new HelloHandler();
$processor = new HelloThriftHelloServiceProcessor($handler);
$transport = new TBufferedTransport(new TPhpStream(TPhpStream::MODE_R | TPhpStream::MODE_W));
$protocol  = new TBinaryProtocol($transport,true,true);
$transport->open();
$processor->process($protocol,$protocol);
$transport->close();

建立Client.php文件

registerDefinition("HelloThrift", $GEN_DIR);
$loader->register();

if (array_search("--http",$argv)) {
    $socket = new THttpClient("local.study-php.com", 80,"/Server.php");
} else {
    $host = explode(":", $argv[1]);
    $socket = new TSocket($host[0], $host[1]);
}
$transport = new TBufferedTransport($socket,1024,1024);
$protocol  = new TBinaryProtocol($transport);
$client    = new HelloThriftHelloServiceClient($protocol);
$transport->open();
echo $client->SayHello("Php-Client");
$transport->close();

測試

php Client.php --http

Python測試

加載thrift-python3模塊(只測試python3,python2就不測試了)

pip3 install thrift

生成python3版本的thrift相關文件

thrift -r --gen py HelloThrift.thrift

這時目錄中生成了一個叫做gen-py的目錄。

建立Server.py文件

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import sys
sys.path.append("./gen-py")

from HelloThrift import HelloService
from HelloThrift.ttypes import *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer

class HelloWorldHandler:
    def __init__(self):
        self.log = {}

    def SayHello(self, user_name = ""):
        return "Python-Server: " + user_name

handler = HelloWorldHandler()
processor = HelloService.Processor(handler)
transport = TSocket.TServerSocket("localhost", 9091)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
server.serve()

建立Client.py文件

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import sys
sys.path.append("./gen-py")

from HelloThrift import HelloService
from HelloThrift.ttypes import *
from HelloThrift.constants import *

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

host = sys.argv[1].split(":")
transport = TSocket.TSocket(host[0], host[1])
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = HelloService.Client(protocol)
transport.open()

msg = client.SayHello("Python-Client")
print(msg)
transport.close()

測試

開一個新窗口,運行下面命令:

python3 Server.php

Go測試

加載go的thrift模塊

go get git.apache.org/thrift.git/lib/go/thrift

生成go版本的thrift相關文件

thrift -r --gen go HelloThrift.thrift

生成Server.go文件

package main

import (
    "./gen-go/hellothrift"
    "git.apache.org/thrift.git/lib/go/thrift"
    "context"
)

const (
    NET_WORK_ADDR = "localhost:9092"
)

type HelloServiceTmpl struct {
}

func (this *HelloServiceTmpl) SayHello(ctx context.Context, str string) (s string, err error) {
    return "Go-Server:" + str, nil
}

func main() {
    transportFactory := thrift.NewTTransportFactory()
    protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
    transportFactory = thrift.NewTBufferedTransportFactory(8192)
    transport, _ := thrift.NewTServerSocket(NET_WORK_ADDR)
    handler := &HelloServiceTmpl{}
    processor := hellothrift.NewHelloServiceProcessor(handler)
    server := thrift.NewTSimpleServer4(processor, transport, transportFactory, protocolFactory)
    server.Serve()
}

生成Client.go文件

package main

import (
    "./gen-go/hellothrift"
    "git.apache.org/thrift.git/lib/go/thrift"
    "fmt"
    "context"
    "os"
)

func main() {
    var transport thrift.TTransport
    args := os.Args
    protocolFactory := thrift.NewTBinaryProtocolFactoryDefault()
    transport, _ = thrift.NewTSocket(args[1])
    transportFactory := thrift.NewTBufferedTransportFactory(8192)
    transport, _ = transportFactory.GetTransport(transport)
    //defer transport.Close()
    transport.Open()
    client := hellothrift.NewHelloServiceClientFactory(transport, protocolFactory)
    str, _ := client.SayHello(context.Background(), "Go-Client")
    fmt.Println(str)
}

測試

開一個新窗口,運行下面命令:

go run Server.go

綜合測試

開啟兩個窗口,保證server開啟

go run Server.go # localhost:9092
python3 Server.py # localhost:9091

php調用go-server、py-server

php Client.php localhost:9091
php Client.php localhost:9092

python3調用go-server、py-server

python3 Client.py localhost:9091
python3 Client.py localhost:9092

go調用go-server、py-server

go run Client.go localhost:9091
go run Client.go localhost:9092
備注

沒有測試php的socket,go、python3的http,可以花時間做一下

代碼純屬組裝,沒有深刻了解其中原理,后期打算寫一篇理論篇和封裝類庫篇

參考

https://studygolang.com/articles/1120

https://www.cnblogs.com/qufo/p/5607653.html

https://www.cnblogs.com/lovemdx/archive/2012/11/22/2782180.html

https://github.com/yuxel/thrift-examples

http://thrift.apache.org/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28276.html

相關文章

  • Spring Boot 中使用 thrift 入門

    摘要:簡介是什么是一個軟件框架,用來進行可擴展且跨語言的服務的開發。的功能允許定義一個簡單的定義文件中的數據類型和服務接口,以作為輸入文件,編譯器生成代碼用來方便地生成客戶端和服務器通信的無縫跨編程語言。 Thrift 簡介 Thrift 是什么 Thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Go,P...

    cnio 評論0 收藏0
  • thrift調用流程分析

    摘要:由于工作需要使用,并且需要根據需求修改源碼,因此必須熟悉執行的流程。目前支持的模型包括使用阻塞的單線程服務器,主要用于調試。 由于工作需要使用thrift,并且需要根據需求修改thrift源碼,因此必須熟悉thrift執行的流程。以下是根據thrift源碼閱讀而得出流程分析。 thrift協議棧概述 thrift是一個rpc框架,開發者可以通過thrift自帶的接口定義語言(IDL)來...

    nidaye 評論0 收藏0
  • Thrift 簡易入門與實戰

    摘要:簡介是一個軟件框架用來進行可擴展且跨語言的服務的開發它結合了功能強大的軟件堆棧和代碼生成引擎以構建在這些編程語言間無縫結合的高效的服務官網地址安裝的安裝比較簡單在下可以直接使用快速安裝或可以通過官網下載這里就不再多說了當下載安裝完畢后我們就 簡介 thrift是一個軟件框架, 用來進行可擴展且跨語言的服務的開發. 它結合了功能強大的軟件堆棧和代碼生成引擎, 以構建在 C++, Java...

    iliyaku 評論0 收藏0
  • Thrift

    摘要:遠程調用服務調用遠端的服務的就像直接在本地調用本質上來說是一種服務的是一種服務但它只限于與語言之間的調用提供了跨語言的服務調用服務的組成部件服務本質上是一種架構服務所以在編寫一個組件時需要編寫端端還要編寫傳輸的協議框架主要是實現這三種部件的 thrift rpc(遠程調用)服務:調用遠端的服務的就像直接在本地調用.本質上來說是一種c/s服務. Java的RMI是一種rpc服務,但它只限...

    JerryC 評論0 收藏0

發表評論

0條評論

codergarden

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<