进程间桥的属性
From Apache OpenOffice Wiki
< Zh | Documentation
整个桥是线程安全的,并且允许多个线程执行远程调用。桥内的分发线程不会阻塞,因为它从不执行调用,而是将请求传送到工作线程。
- 同步调用通过连接发送请求,并使请求的线程等待应答。所有具有返回值(即 out 参数)或抛出非 RuntimeException 异常的调用必须是同步的。
- 异步(或
oneway
)调用通过连接发送请求并立即返回,而不等待应答。目前在 IDL 接口中,使用 [oneway] 修饰符来指定一个请求是同步还是异步。
尽管 UNO oneway 功能的规范和实现没有出现常规问题,但在几种 API 远程使用方案中,oneway 调用会导致 OpenOffice.org 中发生死锁。因此,请不要使用新的 OpenOffice.org UNO API 引入新的 oneway 方法。 |
同步请求可以保证线程标识。当进程 A 调用进程 B,而进程 B 又调用进程 A 时,进程 A 中等待的同一线程将接管新的请求。这就避免了再次锁定同一互斥体时出现的死锁。对于异步请求,不可能发生这样的情况,因为进程 A 中没有等待的线程。这类请求在新的线程中执行。因而保证了两个进程之间的一系列调用。如果将来自进程 A 的两个异步请求发送到进程 B,第二个请求将会等待,直到完成第一个请求。
尽管远程桥支持异步调用,但此功能在默认情况下被禁用。每个调用都是同步执行。UNO 接口方法的单向标志将被忽略。但是,桥可以在启用单向功能的模式下启动,因此可以像异步调用那样执行标有 [oneway]
修饰符的调用 。
为此,必须通过 ',Negotiate=0,ForceSynchronous=0'
扩展远程桥两端连接字符串中的协议部分。
例如:
soffice “-accept=socket,host=0,port=2002;urp,Negotiate=0,ForceSynchronous=0;”
用于启动办公软件,而
"uno:socket,host=localhost,port=2002;urp,Negotiate=0,ForceSynchronous=0;StarOffice.ServiceManager"
作为连接到办公软件的 UNO URL。
Content on this page is licensed under the Public Documentation License (PDL). |