Чтобы дать вам немного контекста.
Я реализовал сервер 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);
}
Это правильный подход, потому что я не нашел решения для вызова некоторых служб непосредственно на самом сервере?