【发布时间】:2018-04-12 19:14:17
【问题描述】:
我在尝试找到解决方案时遇到了一些麻烦,想知道是否有人可以为我指明正确的方向。
我正在实现一个系统,其中多个客户端使用 gRpc 与服务器通信。 服务是用 golang 写的,客户端是用 C 写的。
我正在努力研究如何最好地处理从服务器到客户端的通信。
目前我考虑的选项是:
-
在每个客户端上设置服务器
- 考虑到可能有多个客户端从一个外部 ip 运行,我不确定是否可以创建一个监听公共 ip、本地 ip 和端口组合的客户端?
-
使用 bi-directional streaming
- 这似乎是上面的错误应用程序,您是否必须生成一个新进程才能保持打开连接?
-
在 gRpc 服务旁边打开一个 websocket
- 我觉得这不是正确的解决方案,但似乎是 3 个中最简单的解决方案
对于在 C 中实现上述各项所需的工作,我也不完全有信心,因为 C 中似乎没有包含很多辅助功能
更新:
所以我已经使用 go 客户端 + 服务器实现了一个解决方案。利用双向 rpc 流,
服务器
- 为每个连接的客户端创建一个通道并将其存储在服务上的地图中
- 在流方法中运行一个 for
- 检查 chan 是否有任何消息并调用 stream.sen
- 如果stream.Context().Err()删除客户端chan
客户
- 为从流方法返回的消息创建一个通道
- 在流服务上启动 goroutine 调用 stream.Recv
这是保持对已连接客户端的连接打开的合理方法吗?
【问题讨论】: