欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)境中提供高效的服務間通信,尤其在微服務架構(gòu)中非常流行。

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í)行相應的邏輯,然后將結(jié)果返回給客戶端。

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;
}

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

相關(guān)文章

  • C語言版的三子棋游戲

    C語言版的三子棋游戲

    這篇文章主要為大家詳細介紹了C語言版的三子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C++控制臺實現(xiàn)貪吃蛇游戲

    C++控制臺實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了C++控制臺實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C語言詳細分析講解流程控制語句用法

    C語言詳細分析講解流程控制語句用法

    C語言語句的執(zhí)行默認順序執(zhí)行(從上往下依次執(zhí)行),編程語言一般除了默認的順序執(zhí)行以外,還提供分支執(zhí)行和循環(huán)執(zhí)行的語法,讓我們一起來看看
    2022-05-05
  • C++動態(tài)規(guī)劃之最長公子序列實例

    C++動態(tài)規(guī)劃之最長公子序列實例

    這篇文章主要介紹了C++動態(tài)規(guī)劃之最長公子序列,實例分析了C++求最長公子序列的相關(guān)技巧,是C++字符串操作的一個典型應用,需要的朋友可以參考下
    2015-04-04
  • C++中正則表達式的使用方法詳解

    C++中正則表達式的使用方法詳解

    幾乎所有的編程語言都支持正則表達式。 C++從C++11開始直接支持正則表達式。除了編程語言之外,大多數(shù)文本處理程序都使用正則表達式。本文將探討正則表達式的一般細節(jié)以及C++編程方面的細節(jié),感興趣的可以學習一下
    2022-05-05
  • C++實現(xiàn)字符格式相互轉(zhuǎn)換的示例代碼

    C++實現(xiàn)字符格式相互轉(zhuǎn)換的示例代碼

    這篇文章主要為大家詳細介紹了C++中實現(xiàn)字符格式相互轉(zhuǎn)換的方法,主要有UTF8與string互轉(zhuǎn)、wstring與string互轉(zhuǎn),感興趣的小伙伴可以了解一下
    2022-11-11
  • 探究c++虛表實現(xiàn)代碼

    探究c++虛表實現(xiàn)代碼

    虛表是一種利用程序語言實現(xiàn)的dynamic dispatch機制,或者說runtime method binding機制,也就是我們說的多態(tài)。本文簡單探究虛表實現(xiàn)方法,一起看看吧
    2021-09-09
  • C語言關(guān)鍵字之a(chǎn)uto register詳解

    C語言關(guān)鍵字之a(chǎn)uto register詳解

    這篇文章主要為大家介紹了C語言關(guān)鍵字之a(chǎn)uto register,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++ Boost Utility超詳細講解

    C++ Boost Utility超詳細講解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-12-12
  • 對C語言中遞歸算法的深入解析

    對C語言中遞歸算法的深入解析

    C通過運行時堆棧支持遞歸函數(shù)的實現(xiàn)。遞歸函數(shù)就是直接或間接調(diào)用自身的函數(shù)
    2013-07-07

最新評論