进程外服务器实施
这种加载方法可让您将 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 中声明的方法不处理引用循环。因此,SafePtr 的具体实施是在OutprocSafePtr.h 文件中展示,您可以在某类代码示例中找到此文件,此类代码示例的标志为将加载描述为进程外服务器。您可以添加该标头的文件或自行新建。
- 每次加载Engine到单独进程均需要一个 TCP 端口。配置文件 OutprocConfig.ini 包含进程间通信可用端口的间隔。
- 如果您的应用程序可处理 С++,则在项目中还要链接 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对象不支持处理:
- 回调以及带有回调派生参数的方法
- 用于从内存打开图像的接口和方法
另可参见处理布局和块中描述的方法来加速文档布局的循环访问。
7/3/2024 8:50:25 AM