> ## Documentation Index
> Fetch the complete documentation index at: https://docs.abbyy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# アウトプロセスサーバーの実装

> Linux で ABBYY FineReader Engine をアウトプロセスサーバーとしてロードし、OutprocEngineLoader.h、FREngineOutproc.h、OutprocSafePtr.h を使用して、スレッドセーフなサーバーアプリケーションを実装します。

<Note>
  このトピックは Linux 版 FRE に適用されます。
</Note>

この読み込み方法では、ABBYY FineReader Engine を別プロセス内でアウトプロセスサーバーとして読み込むことができます。この方法を使用すると、ABBYY FineReader Engine のすべてのオブジェクトが完全にスレッドセーフになります。各 FineReader Engine インスタンスは、他のインスタンスと同時に、それぞれ独立したプロセスで実行されます。これにより、プロセッサのプールを作成し、利用可能な CPU 性能を最大限に活用できます。そのため、この方法は特にサーバーアプリケーションに適しています。

Engine をアウトプロセスサーバーとして別プロセスに読み込むには、配布パッケージに含まれている次のファイルを使用します。

* OutprocEngineLoader.h ファイルでは、Engine オブジェクトの初期化メソッドと終了メソッドが宣言されています (C++ では、このヘッダーファイルで宣言されている [InitializeEngine](/ja/fine-reader/engine/api-reference/functions/initializeengine-function) 関数および ExplicitlyUnload 関数を使用します) 。
* FREgnineOutproc.h ファイルは OutprocEngineLoader.h にインクルードされています。これは、マルチスレッドソリューション向けの FREngine.h ファイルに相当し、参照カウント用のメソッドと SAFEARRAY パラメーターを持つメソッドを除き、同じメソッドとインターフェイスをサポートします。
* FREngineOutproc.h で宣言されているメソッドは参照サイクルを処理しません。そのため、SafePtr の専用実装が OutprocSafePtr.h ファイルとして用意されており、アウトプロセスサーバーとしての読み込みを説明するコードサンプルに含まれています。このヘッダーファイルをインクルードすることも、独自に作成することもできます。
* Engine を別プロセスに読み込むたびに、1 つの TCP ポートが必要です。構成ファイル OutprocConfig.ini には、プロセス間通信用に使用可能なポート範囲が含まれています。
* アプリケーションで C++ を使用する場合は、さらに libOutprocClientLib.so ライブラリをプロジェクトにリンクしてください。
* Java ラッパーを使用する場合は、com.abbyy.FREngine.jar ではなく com.abbyy.Outproc.FREngine.jar を使用します。これらのファイルは ABBYY FineReader Engine の[配布パッケージ](/ja/fine-reader/engine/distribution/distribution-windows/distribution-kit)に含まれています。

[Hello (Outproc)](/ja/fine-reader/engine/guided-tour/samples#hello_outproc) および [Multithreading](/ja/fine-reader/engine/guided-tour/samples#multithreading) のコードサンプルを参照してください。これらのサンプルでは、Engine をアウトプロセスサーバーとして読み込む方法を示すとともに、C++ および Java のマルチスレッドアプリケーション向けに再利用可能なソリューションを提供しています。

アウトプロセスサーバーとして読み込まれた Engine オブジェクトには、ABBYY FineReader Engine のオブジェクトおよびメソッドの使用に関して、次のような特性があります。

* [MultiProcessingParams](/ja/fine-reader/engine/api-reference/parameter-objects/multiprocessingparams) オブジェクトの [MultiProcessingMode](/ja/fine-reader/engine/api-reference/parameter-objects/multiprocessingparams#multiprocessingmode) プロパティを MPM\_Sequential に設定し、ドキュメント処理の逐次モードを指定する必要があります。
* IUnknown から派生したパラメーターには NULL を渡す必要があります。これらのパラメーターは通常、エクスポートメソッドで使用されます。別の方法でエクスポートパラメーターを渡すには、必要な設定を持つ[ユーザープロファイル](/ja/fine-reader/engine/guided-tour/advanced-techniques/working-with-profiles#user_profiles)を作成してください。
* アウトプロセスサーバーとして読み込まれた Engine オブジェクトでは、次の機能はサポートされません。
  * コールバック、およびコールバックから派生したパラメーターを持つメソッド
  * メモリから画像を開くためのインターフェイスおよびメソッド

また、[Working with Layout and Blocks](/ja/fine-reader/engine/guided-tour/advanced-techniques/working-with-layout-and-blocks) で説明されている方式を使用すると、ドキュメントのレイアウトの反復処理を高速化できます。
