Как использовать GRPC в C ++ без протобуфа, с пользовательской сериализацией JSON?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать GRPC в C ++ без протобуфа, с пользовательской сериализацией JSON?

Сообщение Anonymous »

Я работаю над проектом C ++, где я хочу использовать GRPC, но я хочу полностью избежать .proto файлов и protobuf, просто чтобы сохранить весь код в C ++, для учебных целей. Для простоты я выбрал JSON, Plain Old Nlohmann :: JSON, и я написал очень простой адаптер SerializationTraits . И вот где я застрял
Официальный блог GRPC показывает пример подключения настраиваемого маршаллера в Java с JSON:
HTTPS://grpc.io/blog/grpc-thith-json/
Однако я не могу найти какую-либо эквивалент "Marshaller" в C+ lection grp. Или любая информация о том, как работать с Grpc ++ без .proto
Мои вопросы:

Как я могу предоставить свой собственный сериализатор/десериализатор (json) для запроса/ответных сообщений в c ++ grpc или SeratizationTraits Определения? Могу ли я зарегистрировать сервис и методы вручную, обходя при этом Generation Protoc ? Документация, GitHub Repo с чем -то подобным, фрагмент тоже подойдет. />
Что я сделал /попробовал до сих пор < /p>

Код: Выделить всё

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;
}
};
И я попытался реализовать сервер, как в этом примере, но без .proto я не знаю, что получить от.
Я попытался использовать Grpc :: service и позвонить в AddMethod, но я застрял в последнем аргументе: rpcmethodhandler. Я не уверен, что туда пройти или как правильно зарегистрировать службу, когда я не сгенерировал заглушки. Cmake, кажется, все еще требует этого, даже если я не намерен использовать его. Единственные два варианта - это модуль и пакет, которые просто контролируют, откуда я получаю эту зависимость, и, хотя и не обязательны, приложения GRPC обычно используют буферы протокола, подразумевает, что я могу ее удалить.


Подробнее здесь: https://stackoverflow.com/questions/797 ... ialization
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Почему я получаю несовместимость протобуфа во время установки grpcio-tools?
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Ошибка gRPC: io.grpc.StatusRuntimeException: ОТМЕНЕНО: io.grpc.Context был отменен без ошибки
    Гость » » в форуме JAVA
    0 Ответы
    114 Просмотры
    Последнее сообщение Гость
  • Проблема с сериализацией JSON в CamelCase в C# [дубликат]
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Проблема с сериализацией JSON в CamelCase в C#
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как создать исходный объект с сериализацией Symfony
    Anonymous » » в форуме Php
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»