Сервисный прокси (service proxy) поддерживает асинхронные методы для взаимодействия с удаленными сервисами через RPC.
Предположим, что имеется следующий сервис:
service dynamic Login multiple=8 {
ui64 login(string, string)
void logout(ui64)
}
Инструменты генерации фреймворка создают следующие заголовочные файлы прокси:
// Автоматически сгенерированный код
#pragma once
#include <string>
#include <cstdint>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <memory>
#include <functional>
#include "rpc_proxy.h"
#include "example.struct.h"
namespace example_cpp;
// Два нижеследующих метода являются асинхронными RPC-вызовами обратной связи
using Login_login_callback = std::function<void(std::uint64_t, rpc::RpcError)>;
using Login_logout_callback = std::function<void(rpc::RpcError)>;
class LoginProxy : public virtual rpc::Proxy {
public:
virtual ~LoginProxy() {}
static std::uint64_t uuid() { return std::uint64_t(5871407834537456905); }
.......
// Ниже представлены прототипы асинхронных методов RPC
// 1. Все асинхронные методы не имеют возвращаемого значения
// 2. Возвращаемое значение будет получено через параметр обратного вызова
virtual void login(const std::string&, const std::string&, Login_login_callback) = 0;
virtual void logout(std::uint64_t, Login_logout_callback) = 0;
};
using LoginPrx = std::shared_ptr<LoginProxy>;
В реализации службы вызывающей стороны предположим, что зарегистрированный путь сервиса равен '/service/login'. Вызовите асинхронную версию прокси-сервера Login:``` // Получите прокси-сервер где-то здесь; его можно сохранить для последующего использования auto login_prx = getContext()->try_get_proxy("/service/login"); // Вызовите методы прокси-сервера if (login_prx) { login_prx->login("user", "pass", [&](std::uint64_t id, rpc::RpcError error) { if (error == rpc::RpcError::NOT_FOUND) { // Метод не найден } else if (error == rpc::RpcError::EXCEPTION) { // Процесс вызова удаленного сервиса завершился C++ исключением } else if (error == rpc::RpcError::TIMEOUT) { // Вызов истёк } else { // Вызов успешен, возвращаемое значение равно: id } }); }
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )