我们有一些在 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/

10-12 01:22