在同一应用程序内为gRPC服务器创建通道是一种有效的方法吗?

时间:2019-03-19 10:40:24

标签: c# websocket protocol-buffers grpc

为您提供一些背景信息。

我在C#应用程序中实现了一个gRPC服务器,因此客户端能够触发一些命令,例如隐藏和显示该应用程序。

使用浏览器中的javascript客户端也应该可行。

所以我的第一个想法是为Web客户端使用gRPC实现,但它只能与代理一起使用,以便能够与我的c#服务器通信。

为了使事情变得容易一些,我还实现了一个WebSocket服务器,并来回发送protobuf字节。

这很好用,而且只有一块丢失。

如何在WebSocket服务器上使用gRPC的当前实现?

我的想法是使用同一应用程序内的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);
}

这是一种有效的方法,因为我没有找到直接在服务器本身上调用某些服务的解决方案?

0 个答案:

没有答案