进程间桥的属性

From Apache OpenOffice Wiki
Jump to: navigation, search





整个桥是线程安全的,并且允许多个线程执行远程调用。桥内的分发线程不会阻塞,因为它从不执行调用,而是将请求传送到工作线程。

  • 同步调用通过连接发送请求,并使请求的线程等待应答。所有具有返回值(即 out 参数)或抛出非 RuntimeException 异常的调用必须是同步的。
  • 异步(或 oneway )调用通过连接发送请求并立即返回,而不等待应答。目前在 IDL 接口中,使用 [oneway] 修饰符来指定一个请求是同步还是异步。


Documentation caution.png 尽管 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。


Documentation caution.png 异步模式会导致 OpenOffice.org 中发生死锁。如果远程桥的一端是 OpenOffice.org,我们建议不要激活它。
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages