为您提供一些背景信息。
我在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);
}
这是一种有效的方法,因为我没有找到直接在服务器本身上调用某些服务的解决方案?