Wie verwende ich GRPC in C ++ ohne Protobuf mit benutzerdefinierter JSON -Serialisierung?C++

Programme in C++. Entwicklerforum
Anonymous
 Wie verwende ich GRPC in C ++ ohne Protobuf mit benutzerdefinierter JSON -Serialisierung?

Post by Anonymous »

Ich arbeite an einem C ++ - Projekt, bei dem ich GRPC verwenden möchte, aber ich möchte .Proto Dateien und ProtObUF vollständig vermeiden, um den gesamten Code für Trainingszwecke zu behalten. Der Einfachheit halber habe ich JSON ausgewählt, einfach alte alte Nlohmann :: JSON, und ich habe einen sehr einfachen Serialisierungsrits Adapter dafür geschrieben. Und hier bin ich festgefahren.
Der offizielle GRPC-Blog zeigt ein Beispiel für ein benutzerdefiniertes Marshaller in Java mit JSON:
https://grpc.io/blog/grpc-with-json/

Meine Fragen sind:

Wie stell ich meinen eigenen Serializer/Deserializer (JSON) für Anforderungsmeldungen/Codeen < /li>
Gibt es eine C ++ - API zum vollständigen Schreiben eines GRPC -Dienstes ohne .Proto < /code> Definitionen? Kann ich einen Dienst und eine Methode manuell registrieren, während ich Protoc Codeerzeugung umgeht? Dokumentation, Github Repo mit so etwas, ein Ausschnitt würde es auch gut machen. />
Was ich bisher getan /ausprobiert habe.

Code: Select all

template 
class grpc::SerializationTraits {
public:
static grpc::Status Serialize(const nlohmann::json& json,
grpc::ByteBuffer* buffer,
bool* own_buffer) {
std::string s = json.dump();
grpc::Slice slice(s.data(), s.size());
*buffer = grpc::ByteBuffer(&slice, 1);
*own_buffer = true;
return grpc::Status::OK;
}

static grpc::Status Deserialize(grpc::ByteBuffer* buffer,
nlohmann::json* json) {
std::vector slices;
buffer->Dump(&slices);

std::string data;
for (auto& s : slices) {
data.append(reinterpret_cast(s.begin()), s.size());
}

try {
*json = nlohmann::json::parse(data);
} catch (const std::exception& e) {
return grpc::Status(grpc::StatusCode::INTERNAL,
std::string("JSON parse error: ") + e.what());
}
return grpc::Status::OK;
}
};
Und ich habe versucht, einen Server wie in diesem Beispiel zu implementieren, aber ohne .Proto weiß ich nicht, woraus ich abgeleitet bin. Ich bin mir nicht sicher, was ich dort übergeben habe oder wie ich den Dienst richtig registrieren soll, wenn ich keine Stubs generiert habe. CMake scheint es immer noch zu benötigen, auch wenn ich nicht beabsichtigt habe, es zu verwenden. Die einzigen beiden Optionen sind Modul und Paket, die nur eine Steuerung, von der ich diese Abhängigkeit erhalte, und obwohl GRPC -Anwendungen in der Regel Protokollpuffer nutzen, impliziert ich, dass ich sie entfernen kann.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post