打开连接

From Apache OpenOffice Wiki
Jump to: navigation, search




如前面章节所述,使用 UnoUrlResolver 导入 UNO 对象这一方法有一些不足之处。 UnoUrlResolver 的下一层为处理进程间连接提供了非常大的灵活性。


UNO 进程间桥建立在 com.sun.star.connection.XConnection 接口上,此接口封装一个可靠的双向字节流连接(如 TCP/IP 连接)。

  interface XConnection: com::sun::star::uno::XInterface
  { 
      long read( [out] sequence < byte > aReadBytes , [in] long nBytesToRead ) 
           raises( com::sun::star::io::IOException ); 
      void write( [in] sequence < byte > aData ) 
           raises( com::sun::star::io::IOException ); 
      void flush( ) raises( com::sun::star::io::IOException ); 
      void close( ) raises( com::sun::star::io::IOException ); 
      string getDescription(); 
  };


建立进程间连接有多种不同的机制。其中多数机制遵循类似的模式。一个进程对资源进行侦听,并等待一个或多个进程连接到此资源。


此模式是通过导出 com.sun.star.connection.Acceptor 接口的 com.sun.star.connection.XAcceptor 和导出 com.sun.star.connection.Connector 接口的 com.sun.star.connection.XConnector 服务抽出概念。

  interface XAcceptor: com::sun::star::uno::XInterface
  { 
      XConnection accept( [in] string sConnectionDescription ) 
           raises( AlreadyAcceptingException, 
                   ConnectionSetupException, 
                   com::sun::star::lang::IllegalArgumentException); 
 
      void stopAccepting(); 
  };
 
  interface XConnector: com::sun::star::uno::XInterface
  { 
      XConnection connect( [in] string sConnectionDescription ) 
           raises( NoConnectException,ConnectionSetupException ); 
  };


侦听进程使用 Acceptor 服务,而主动连接服务使用 Connector 服务。方法 accept()connect() 以参数的方式获取连接字符串。它是 UNO URL 中的连接部分(位于 uno:;urp 之间)。


连接字符串包含一个连接类型,后跟一个逗号分隔的名称值对列表。下表所示为默认情况下支持的连接类型。

连接类型
套接字 可靠的 TCP/IP 套接字连接
参数 说明
host 要侦听/连接资源的主机名或 IP 编号。可以是本地主机。在 Acceptor 字符串中,它可以是 0 ('host=0'),这意味着接受所有可用网络接口。
port 要侦听/连接的 TCP/IP 端口号。
tcpNoDelay 对应于套接字选项 tcpNoDelay。对于 UNO 连接,应将此参数设置为 1 (这不是默认值 ― 必须明确添加此数)。如果使用默认值 (0),在某些调用组合中可能会发生 200 毫秒的延迟。
管道 命名管道(使用共享内存)。此进程间连接类型比套接字连接稍微快一些,并仅适用于两个进程位于同一台计算机的情况。默认情况下,此连接类型不适用于 Java,因为 Java 不直接支持命名管道
参数 说明
name 命名管道的名称。一台计算机一次只能接受一个进程名称。


Tip.png 可以通过实现 Connector 和 Acceptor 服务,并通过按模式 com.sun.star.connection.Connector.<connection-type>(其中,<connection-type> 是新的连接类型名称)选择服务名称来添加更多类型的进程间连接。

如果实现了服务 com.sun.star.connection.Connector.mytype,可使用 URL 为 uno:mytype,param1=foo;urp;StarOffice.ServiceManager 的 UnoUrlResolver 来建立与办公软件的进程间连接。


Content on this page is licensed under the Public Documentation License (PDL).
Personal tools
In other languages