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