Потоковое клиентское приложение gRPC вызывает ошибку сегментации на нескольких клиентах потокаLinux

Ответить Пред. темаСлед. тема
Anonymous
 Потоковое клиентское приложение gRPC вызывает ошибку сегментации на нескольких клиентах потока

Сообщение Anonymous »


У меня есть простая реализация службы gRPC:

сервис TestService { rpc stringService(Empty) возвращает (поток StringTest) {} rpc intService(Empty) возвращает (поток IntTest) {} } сообщение StringTest { строка my_string = 1; } сообщение IntTest { int32 my_int = 1; } сообщение пусто {} Идея состоит в том, чтобы просто непрерывно передавать клиенту целые числа и строки. Реализация сервера следующая:

class TestServiceImpl Final: public TestService::Service { публика: grpc::Status TestServiceImpl::stringService(grpc::ServerContext *context, const Empty *request, ::grpc::ServerWriter *writer) переопределить { данные StringTest; для (int я = 0; я Запись (данные); если (я == 10) я = 0; } вернуть grpc::Status::OK; } grpc::Status TestServiceImpl::intService(grpc::ServerContext *context, const Empty *request, ::grpc::ServerWriter *writer) переопределить { данные IntTest; для (int я = 10; я Запись (данные); если (я == 20) я = 10; } вернуть grpc::Status::OK; } }; интервал основной() { std::string addr("127.0.0.1:50051"); служба TestServiceImpl; grpc::ServerBuilder строитель; builder.AddListeningPort(addr, grpc::InsecureServerCredentials()); builder.RegisterService(&сервис); std::unique_ptr server(builder.BuildAndStart()); std::cout stringService(&context, request); // Кажется, здесь произошла ошибка StringTest stringMsg; while (reader->Read(&stringMsg)) { std::cout start(); } void IntThread::run() { автоматический канал = grpc::CreateChannel("127.0.0.1:50051", grpc::InsecureChannelCredentials()); ::grpc::Контекст ClientContext; ::Пустой запрос; m_stub = TestService::NewStub(канал); автоматическое чтение = m_stub->intService(&context, request); // Кажется, здесь произошла ошибка ИнтТест Интмсг; while (читатель->Чтение(&IntMsg)) { std::cout старт(); loader.setFileName("/путь/к/libIntClient.so"); загрузчик.загрузка(); abs = qobject_cast(loader.instance()); абс-> старт(); вернуть a.exec(); } Если я загружаю только один плагин, он работает безупречно и начинает получать и выводить строки/int из потока сервера gRPC. Проблема в том, что когда я загружаю оба плагина, при вызове службы всегда возникает ошибка сегментации. Если я наблюдаю за выводом сервера, то иногда другой поток достигает сервисной функции, но тут же аварийно завершает работу.

Итак, проблема в ошибке сегментации. Я понятия не имею, что могло стать причиной этого. Вероятно, это как-то связано с безопасностью потоков, но я не знаю, какой критический ресурс должен быть защищен от доступа. Мы будем очень признательны за любую информацию.
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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