最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++使用grpc實現(xiàn)回射服務(wù)器

 更新時間:2024年10月28日 09:28:30   作者:CodeGrindstone  
gRPC是由Google開發(fā)的一個開源的高性能遠(yuǎn)程過程調(diào)用(RPC)框架,用于在分布式系統(tǒng)中實現(xiàn)跨語言的服務(wù)通信,本文我們就來看看C++如何使用grpc實現(xiàn)回射服務(wù)器

1、什么是gRPC

gRPC(Google Remote Procedure Call)是由 Google 開發(fā)的一個開源的高性能遠(yuǎn)程過程調(diào)用(RPC)框架,用于在分布式系統(tǒng)中實現(xiàn)跨語言的服務(wù)通信。它基于 HTTP/2 協(xié)議,使用 Protocol Buffers(protobuf)作為數(shù)據(jù)交換格式。gRPC 適合在多語言環(huán)境中提供高效的服務(wù)間通信,尤其在微服務(wù)架構(gòu)中非常流行。

2、gRPC的工作流程

1.服務(wù)定義:

使用Protocol Buffers定義服務(wù)接口及其方法,包括輸入?yún)?shù)和返回值。比如,以下是一個簡單的服務(wù)定義實例:

// message.proto
syntax = "proto3";

// 聲明protobuf中的包名
package message;

service Greeter {
    rpc SayHello(HelloRequest) returns (HelloResponse);
}

message HelloRequest {
    string name = 1;
}

message HelloResponse {
    string message = 1;
}

2.生成代碼:

使用gRPC提供的工具,根據(jù)proto文件生成相應(yīng)代碼

protoc -I="." --grpc_out="." --plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin message.proto
protoc -I="." --cpp_out="." message.proto

3.實現(xiàn)服務(wù)器:

服務(wù)端實現(xiàn)定義的服務(wù)邏輯,處理客戶端請求

4.客戶端調(diào)用:

客戶端使用生成的存根(stub)發(fā)起遠(yuǎn)程調(diào)用,調(diào)用過程與本地方法調(diào)用類似

5.消息序列化與傳輸

客戶端將消息序列化為二進(jìn)制格式,通過HTTP/2發(fā)送到服務(wù)器。服務(wù)器接收到請求后反序列化,并執(zhí)行相應(yīng)的邏輯,然后將結(jié)果返回給客戶端。

3、服務(wù)端(C++)

實現(xiàn)回射服務(wù)器:客戶端與服務(wù)端之間發(fā)送內(nèi)容一致

using namespace std;
using namespace boost::asio;
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;


using message::HelloResponse;
using message::HelloRequest;
using message::Greeter;

class gRPCServerImpl final : public Greeter::Service
{
public:
    gRPCServerImpl(){};
    Status SayHello(ServerContext* context, const HelloRequest* request, HelloResponse* response){
        cout << "gRPC Server received message: " << request->name() << endl;
        response->set_message(request->name());
        return Status::OK;
    }

}; 

void RunServer(std::string port)
{
    std::string server_address("0.0.0.0:" + port);
    gRPCServerImpl service; 
    // 創(chuàng)建和啟動gRPC服務(wù)器
    grpc::ServerBuilder builder;
    // 監(jiān)聽端口和添加服務(wù)
    builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());
    builder.RegisterService(&service);
    
    unique_ptr<grpc::Server> server(builder.BuildAndStart());
    cout << "Server listening on " << server_address << endl;
    
    boost::asio::io_context io_context;
    boost::asio::signal_set signals(io_context, SIGINT, SIGTERM);
    signals.async_wait([&server](const boost::system::error_code& error, int signal_number){
        if(!error){
            server->Shutdown();
            cout << "Server ShutDown!" << endl;
        }
    });
    thread([&io_context](){   io_context.run(); }).detach();
    server->Wait();
    io_context.stop();
}
 int main()
 {
    try{
        std::string port = "10086";
        RunServer(port);
    }catch(exception& e){
        cerr << e.what() << endl;
    }
    return 0;
 }

4、客戶端(c++)

using namespace std;
using namespace boost::asio;
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;

using message::HelloResponse;
using message::HelloRequest;
using message::Greeter;

void gRPCclient()
{
    grpc::ClientContext io_context;
    HelloResponse Rep;
    HelloRequest Req;
    std::string address_server("192.168.49.130:10086");
    auto channle = grpc::CreateChannel(address_server, grpc::InsecureChannelCredentials());

    auto stub = Greeter::NewStub(channle);
    
    std::string message;
    std::cout << "請輸入: ";
    cin >> message;
    Req.set_name(message);

    Status status = stub->SayHello(&io_context, Req, &Rep);
    
    if(status.ok()){
        cout << Rep.message() << endl;
    }else{
        cout << "錯誤" << endl;
    }

}

int main()
{
    gRPCclient();
    return 0;
}

到此這篇關(guān)于C++使用grpc實現(xiàn)回射服務(wù)器的文章就介紹到這了,更多相關(guān)C++ grpc回射服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文詳解C++關(guān)鍵字nullptr及與NULL的區(qū)別

    一文詳解C++關(guān)鍵字nullptr及與NULL的區(qū)別

    這篇文章主要給大家詳細(xì)介紹了C++關(guān)鍵字nullptr,及?NULL與nullptr的區(qū)別,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • C語言 以字符串的形式讀寫文件詳解及示例代碼

    C語言 以字符串的形式讀寫文件詳解及示例代碼

    本文主要介紹 C語言以字符串的形式讀寫文件,這里提供了詳細(xì)的資料及簡單示例代碼以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分的小伙伴可以參考下
    2016-08-08
  • 采用C++實現(xiàn)區(qū)間圖著色問題(貪心算法)實例詳解

    采用C++實現(xiàn)區(qū)間圖著色問題(貪心算法)實例詳解

    這篇文章主要介紹了采用C++實現(xiàn)區(qū)間圖著色問題(貪心算法),很經(jīng)典的算法問題,需要的朋友可以參考下
    2014-07-07
  • C++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)

    C++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄狢++11的for循環(huán),以及范圍Range類的簡單實現(xiàn)。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Qt編寫自定義控件實現(xiàn)抽獎轉(zhuǎn)盤

    Qt編寫自定義控件實現(xiàn)抽獎轉(zhuǎn)盤

    這篇文章主要為大家詳細(xì)介紹了Qt編寫自定義控件實現(xiàn)抽獎轉(zhuǎn)盤,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 一文讀懂C++ 虛函數(shù) virtual

    一文讀懂C++ 虛函數(shù) virtual

    這篇文章主要介紹了C++ 虛函數(shù) virtual的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • C++初級線程管理

    C++初級線程管理

    這篇文章主要介紹了C++初級線程管理,C++11中提供了std::thread庫,本文將從線程的啟動、線程等待、線程分離、線程傳參、線程識別等幾個方面介紹初級線程管理的知識,需要的朋友可以參考一下
    2021-12-12
  • C語言實現(xiàn)統(tǒng)計字符串單詞數(shù)

    C語言實現(xiàn)統(tǒng)計字符串單詞數(shù)

    這篇文章主要介紹了C語言實現(xiàn)統(tǒng)計字符串單詞數(shù),代碼非常的簡潔,有需要的小伙伴快來參考下。
    2015-03-03
  • 一文搞懂C語言中的文件操作

    一文搞懂C語言中的文件操作

    文件操作想必大家掌握的并不熟練,確實因為我們用的并不多,而本節(jié)內(nèi)容能夠讓大家初步認(rèn)識文件操作,從文件認(rèn)識到文件使用,讓我們對c語言文件操作有個初步的了解
    2022-11-11
  • 詳解C語言學(xué)習(xí)記錄之指針

    詳解C語言學(xué)習(xí)記錄之指針

    關(guān)于指針,其是C語言的重點(diǎn),C語言學(xué)的好壞,其實就是指針學(xué)的好壞。其實指針并不復(fù)雜,學(xué)習(xí)指針,要正確的理解指針,本片文章能給就來學(xué)習(xí)一下
    2021-11-11

最新評論

聂拉木县| 剑川县| 鹿泉市| 门头沟区| 静宁县| 即墨市| 迁西县| 兴山县| 二手房| 资溪县| 冕宁县| 时尚| 通榆县| 乌苏市| 龙岩市| 昭通市| 宜都市| 桃园县| 漳州市| 那坡县| 木兰县| 休宁县| 岳阳县| 太原市| 买车| 台湾省| 邛崃市| 阿荣旗| 育儿| 乐都县| 罗甸县| 福贡县| 博爱县| 鹤峰县| 巴东县| 尚义县| 巴楚县| 彝良县| 灌云县| 兴山县| 洛南县|