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

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

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

1、什么是gRPC

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

2、gRPC的工作流程

1.服務定義:

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

// 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文件生成相應代碼

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

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

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

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

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

5.消息序列化與傳輸

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

3、服務端(C++)

實現(xiàn)回射服務器:客戶端與服務端之間發(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服務器
    grpc::ServerBuilder builder;
    // 監(jiān)聽端口和添加服務
    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;
}

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

相關文章

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

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

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

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

    本文主要介紹 C語言以字符串的形式讀寫文件,這里提供了詳細的資料及簡單示例代碼以便大家學習參考,有學習此部分的小伙伴可以參考下
    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)抽獎轉盤

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

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

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

    這篇文章主要介紹了C++ 虛函數(shù) virtual的相關資料,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    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)容能夠讓大家初步認識文件操作,從文件認識到文件使用,讓我們對c語言文件操作有個初步的了解
    2022-11-11
  • 詳解C語言學習記錄之指針

    詳解C語言學習記錄之指針

    關于指針,其是C語言的重點,C語言學的好壞,其實就是指針學的好壞。其實指針并不復雜,學習指針,要正確的理解指針,本片文章能給就來學習一下
    2021-11-11

最新評論

天长市| 潜江市| 金乡县| 黎城县| 桃园市| 连江县| 太原市| 延安市| 商都县| 长兴县| 隆林| 余江县| 舟山市| 于田县| 高邑县| 塔城市| 竹北市| 卓尼县| 阿拉善盟| 蚌埠市| 都匀市| 始兴县| 南京市| 贵港市| 永宁县| 全椒县| 韶关市| 定兴县| 纳雍县| 新乐市| 全南县| 平舆县| 广安市| 青浦区| 胶州市| 临沭县| 武山县| 横峰县| 霞浦县| 兖州市| 竹溪县|