Это правильный подход для создания канала к серверу gRPC в том же приложении? - PullRequest
0 голосов
/ 19 марта 2019

Чтобы дать вам немного контекста.

Я реализовал сервер gRPC в своем приложении C #, чтобы клиенты могли запускать некоторые команды, такие как скрытие и отображение приложения.

Это должнотакже возможно с клиентом javascript внутри браузера.

Поэтому моей первой идеей было использование реализации gRPC для веб-клиентов, но она работает только с прокси, чтобы иметь возможность общаться с моим сервером c #.

Чтобы немного упростить ситуацию, я также реализовал сервер WebSocket и отправляю байты протобуфа взад и вперед.

Это прекрасно работает, и пропущена только одна часть.

Как я могу использовать текущую реализацию с gRPC с моим сервером WebSocket?

Моя идея заключалась в том, чтобы подключиться к серверу gRPC с помощью клиента gRPC внутри того же приложения, поэтому сервер WebSocket является клиентом сервера gRPC.

Для этого я добавил новое сообщение Protobuf, которое содержит все возможные сообщения и используется только для связи WebSocket.катионы.

message Payload {
    google.protobuf.Timestamp timestamp = 1;
    oneof data {
        ApplicationWindowRequest request = 2;
        ApplicationWindowResponse response = 3;
    }
}

Теперь я могу проанализировать двоичные данные от js-клиента обратно к объекту Payload и отправить запрос на сервер gRPC через клиент gRPC.

private void OnBinary(IWebSocketConnection socket, byte[] message)
{
    var payload = Payload.Parser.ParseFrom(message);

    commonClient.ChangeVisibility(payload.Request);
}

Это правильный подход, потому что я не нашел решения для вызова некоторых служб непосредственно на самом сервере?

...