c++ - 如何实现零拷贝形式的gRPC c++
问题描述
我想编写一个在某些情况下用作 FTP 服务器的 gRPC 服务器(c++)。具体来说,客户端通过文件名请求文件,而服务器返回文件内容(如果存在)。在传统的socket编程中,我可以在linux系统上实现零拷贝sendfile
。这意味着文件内容将直接从磁盘进入套接字缓冲区,而无需在用户空间中传输。但是在 gRPC 世界中,套接字详细信息是隐藏的,这意味着您可能无法访问套接字后面所需的文件描述符sendfile
:
ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);
因此,我必须先将文件字节读入内存,然后在 gRPC 响应中返回。这是不必要的性能损失。我想知道是否有任何 API 或解决方法。
解决方案
sendfile
直接在低级 grpc 套接字上进行处理没有多大意义,因为 grpc 协议本身将在发送的数据周围有很多框架。您的数据将自然地分块并可能与其他控制数据复用。因此,没有 API 可以做你想做的事。
推荐阅读
- ruby-on-rails - 如何在 Rails 中正确使用基本范围
- python - importing functions from another jupyter notebook
- mobile - 基于移动的内部工具的技术堆栈
- android - 在 android studio 3.0.2 的命令行上打开 android sqlite 数据库文件
- php - 如何在 PHP 中创建一个返回 Json 的 Restful Web 服务
- asterisk - 星号回铃音录音
- ubuntu - 了解 Gitlab 中的所有 LDAP 用户
- java - 列表
- > 未序列化
- azure - Microsoft Azure 认知服务手写检测边界框参数
- node.js - AWS Lambda HTTPS 请求 - 蓝图