跳转到主要内容
本主题适用于 Linux 版 FRE。
这种加载方式可将 ABBYY FineReader Engine 作为进程外服务器加载到单独的进程中。使用这种加载方式时,所有 ABBYY FineReader Engine 对象都完全线程安全。每个 FineReader Engine 实例都会在各自独立的进程中与其他实例同时运行。这样,你就可以创建处理器池,并充分利用可用的 CPU 算力。因此,这种方式特别适合服务器应用程序。 要将 Engine 作为进程外服务器加载到单独的进程中,请使用发行包中提供的以下文件:
  • OutprocEngineLoader.h 文件声明了 Engine 对象的初始化和去初始化方法 (对于 C++,请使用此头文件中声明的 InitializeEngine 和 ExplicitlyUnload 函数) 。
  • FREgnineOutproc.h 文件包含在 OutprocEngineLoader.h 中。它相当于面向多线程解决方案的 FREngine.h 文件,支持相同的方法和接口,但不包括用于引用计数的方法以及带有 SAFEARRAY 参数的方法。
  • FREngineOutproc.h 中声明的方法不处理循环引用。因此,OutprocSafePtr.h 文件中提供了 SafePtr 的专用实现,你可以在介绍如何作为进程外服务器加载的代码示例中找到它。你可以包含此头文件,也可以自行实现。
  • 每次将 Engine 加载到单独进程中时,都需要占用一个 TCP 端口。配置文件 OutprocConfig.ini 中包含用于进程间通信的可用端口范围。
  • 如果你的应用程序使用 C++,还需要在项目中额外链接 libOutprocClientLib.so 库。
  • 如果你使用 Java 封装器,请使用 com.abbyy.Outproc.FREngine.jar,而不是 com.abbyy.FREngine.jar。这些文件包含在 ABBYY FineReader Engine 发行包 中。
请参阅 Hello (Outproc)Multithreading 代码示例,它们演示了如何将 Engine 加载为进程外服务器,并为 C++ 和 Java 多线程应用程序提供了可复用的解决方案。 作为进程外服务器加载的 Engine 对象在使用 ABBYY FineReader Engine 对象和方法时有以下特点:
  • 你必须通过将 MultiProcessingParams 对象的 MultiProcessingMode 属性设置为 MPM_Sequential,来指定文档处理的顺序模式。
  • 你必须为派生自 IUnknown 的参数传递 NULL。这些参数通常用于导出方法。若要以其他方式传递导出参数,请创建具有所需设置的用户配置文件
  • 作为进程外服务器加载的 Engine 对象不支持以下操作:
    • 回调,以及带有派生自回调的参数的方法
    • 用于从内存中打开图像的接口和方法
你还可以使用 Working with Layout and Blocks 中介绍的方案,加快文档版面的迭代。