Как обойти механизм IPC, если клиент и сервер работают в одном контексте процесса в gRPC? ⇐ C++
-
Гость
Как обойти механизм IPC, если клиент и сервер работают в одном контексте процесса в gRPC?
В проекте, над которым я работаю (в системе на базе Linux), у меня есть сервер, на котором может быть несколько клиентов. Все это происходит на одной машине, поэтому я использую доменные сокеты Unix в качестве grpc IPC. механизм. Теперь один из клиентов работает в том же контексте процесса, что и сервер. В данном случае я хочу иметь возможность обойти механизм IPC, поскольку он просто добавляет накладные расходы и здесь не требуется. Я разрабатываю это на C++. Я вижу упоминание о inProcessChannel здесь, в их документации, но как мне на самом деле его создать и использовать в своем варианте использования? Похоже, он присутствует только в пространстве имен grpc::Server.
Я планировал позволить клиенту и серверу первоначально взаимодействовать через стандартный согласованный канал gRPC в долларах США, чтобы клиент мог запрашивать у сервера свой PID и сверяться со своим собственным PID, и если он совпадает, я хочу иметь возможность использовать inProcessChannel для связи (насколько я понимаю, это позволит обойти любые накладные расходы IPC.
Меня поразило, как я могу создать inProcessChannel со стороны клиента. Я не смог найти способ сделать это через grpc::CreateChannel. Означает ли это, что мне нужно создать его на сервере, передать канал клиенту, создать с ним заглушку и общаться?
Может кто-нибудь дать мне несколько советов?
В проекте, над которым я работаю (в системе на базе Linux), у меня есть сервер, на котором может быть несколько клиентов. Все это происходит на одной машине, поэтому я использую доменные сокеты Unix в качестве grpc IPC. механизм. Теперь один из клиентов работает в том же контексте процесса, что и сервер. В данном случае я хочу иметь возможность обойти механизм IPC, поскольку он просто добавляет накладные расходы и здесь не требуется. Я разрабатываю это на C++. Я вижу упоминание о inProcessChannel здесь, в их документации, но как мне на самом деле его создать и использовать в своем варианте использования? Похоже, он присутствует только в пространстве имен grpc::Server.
Я планировал позволить клиенту и серверу первоначально взаимодействовать через стандартный согласованный канал gRPC в долларах США, чтобы клиент мог запрашивать у сервера свой PID и сверяться со своим собственным PID, и если он совпадает, я хочу иметь возможность использовать inProcessChannel для связи (насколько я понимаю, это позволит обойти любые накладные расходы IPC.
Меня поразило, как я могу создать inProcessChannel со стороны клиента. Я не смог найти способ сделать это через grpc::CreateChannel. Означает ли это, что мне нужно создать его на сервере, передать канал клиенту, создать с ним заглушку и общаться?
Может кто-нибудь дать мне несколько советов?
Мобильная версия