我有一个c++客户端二进制文件,它使用epoll()来阻塞各种操作系统描述符-用于文件I/O,套接字I/O,操作系统计时器;现在它也需要一个gRPC客户(包括流媒体回复)。
在网络上阅读相关问题的答案(例如关于服务器),似乎没有简单的方法从C/c++要求gRPC给出一个fd,可以合并到现有的epoll集,然后触发gRPC进行读取&处理传入响应。对吗?
或者反向可能:通过gRPC核心iomgr框架使用文件,套接字和定时器,否则与gRPC服务无关?(用于读取本地文件,与外部网络设备通信以及管理客户端内部高频定时器需求。
所讨论的客户端是具有RT优先级的单个线程(在使用PREEMPT RT的嵌入式(软)实时系统上)。考虑到gRPC创建了其他线程,这可能是一个问题吗?
不幸的是,这是不可能的今天,但它将是在未来一旦我们完成EventEngine的努力。一旦准备好了,你就可以将自己的事件循环注入gRPC。然而,这可能要到明年的某个时候才能准备好投入公共使用。
现在,我能提供的唯一建议是,如果你正在使用不安全的通道,并且不需要任何名称解析或负载平衡功能,你可以使用CreateInsecureChannelFromFd()
来做相反的事情(提供你自己的fd作为gRPC连接)。