c - SunRPC 启用单向消息传递(流/批处理?)

标签 c linux rpc sunrpc

我们有一些服务在 Linux (RHEL 4/5) 上使用 SunRPC,我们希望加快速度。

我们的 RPC 调用不需要返回值,尽管根据 RPC 的性质,无论如何总是会发送一个 ack。这引入了最近成为问题的延迟 - 当通过可靠传输 (TCP) 运行时,我们希望避免 RPC 回复引入的延迟。

文档 here表示 Solaris 具有启用此功能的“oneway”关键字,尽管 Linux/glibc 似乎不支持此功能。

有没有什么方法可以在 Linux 上使用 SunRPC 启用“流式”或单向消息传递?

最佳答案

为了获得异步(或“批处理”)RPC 调用,必须对标准 clnt_call() 调用进行两处更改:参数是指向 XDR 函数的指针回复数据结构必须为 NULL 并且超时参数必须为零,即

static struct timeval ZERO_TIMEOUT = { 0, 0 };
static char clnt_res;
memset((char*)&clnt_res, 0, sizeof(clnt_res);
if (clnt_call(clnt, messageType, (xdrproc_t)xdr_messageType_t, (caddr_t)argp,
            (xdrproc_t)NULL, (caddr_t)&clnt_res, ZERO_TIMEOUT) != RPC_SUCCESS) {
    ...
}

关于c - SunRPC 启用单向消息传递(流/批处理?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606862/

相关文章:

linux - 链接器如何知道用系统调用链接什么?

mysql - 将 sql 文件采购回 mysql 数据库时抑制警告

rpc - 后端-前端双向通信

c++ - 使用 ncalrpc 的 RPC 端点列表

c - 当我将指针初始化为NULL时,运行结果很奇怪

c - 如何理解汇编级别的原子 test_and_set?

Android 和 NDK/库

c++ - 十六进制字符数组 2 x 2 个字符到 uint8_t

linux - 如果没有安装 postgres,我该如何安装 DBD::Pg?

parallel-processing - 如何使用 shell 命令实现 MapReduce?