我们有一些服务使用Linux上的SunRPC(RHEL 4/5),我们希望加快速度。
我们的RPC调用不需要返回值,但是由于RPC的性质,总是发送ack。 这引入了最近成为问题的延迟 – 当运行在可靠的传输(TCP)上时,我们希望避免RPC应答引起的延迟。
Docs 在这里表示Solaris有“oneway”关键字,但是Linux / glibc似乎不支持这一点。
我们可以通过Linux上的SunRPC实现“stream式传输”或单向消息传递吗?
是SIGSEGV交付给每个线程?
摄像头访问在C + +
删除列表视图中的列数据
如何在win32 c ++中打印预览?
包装第三方DLL
这个expression意味着什么? (C语言中的SetConsoleTextAttribute函数)
如何创build从C#到C + +委托,将IEnumerable作为参数与SWIG的通过?
找出某个应用程序/命令在Linux上是否可用?
对于标准的clnt_call()调用,为了获得一个异步的(或“批量的”)RPC调用,必须做两个改变:对于应答数据结构来说,指向XDR函数的参数必须是NULL ,超时参数必须为零,即,
static struct timeval ZERO_TIMEOUT = { 0,0 }; static char clnt_res; memset((char*)&clnt_res,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) { ... }
如果您的RPC库不支持“单向”通信,那么您总是可以使用线程池模式来仿真程序中的“火灾和遗忘”类型的调用。 而不是直接发送远程调用(并因此阻塞,直到您收到答案),您排队一个命令 ,远程调用在一个不同的线程,并允许主程序继续它的执行。