2009-05-14 7 views
1

私は、そのインターフェイスの1つからAPIを公開しているCOM EXEアウトオブプロセスサーバーを持っています。 このAPIの機能はURLを投稿することです。COMサーバーにジョブキューが必要ですか?

クライアントはCOMサーバーのインスタンスを作成し、このAPIを新しいURLで呼び出します。

クライアントがURLを送信する必要があるたびに、このCOMサーバーのインスタンスが作成されます。

クライアントが投稿したすべてのURLを追跡し、何も失われていないことを確認するために、COMサーバーにキューを実装する必要がありますか?

私はCOMオブジェクトを作成するたびに新しいプロセスが起動するのではないかと疑問に思っていますか? その場合、私はサーバーにジョブキューを実装する必要はないと思います。

しかし、メモリに1つのインスタンスしか残っていない場合、クライアントによって送信されたジョブ/ URLが失われる可能性があります。

答えて

1

通常、COMはすべての要求に対して1つのサーバープロセスを開始し、そのプロセス内のすべてのオブジェクトをインスタンス化します。すべてのオブジェクト(グローバル変数または静的メンバー変数)間で共有されているデータがある場合は、同期を処理するか、COMコンポーネントのアパートメントスレッド(STA)を作成する必要があります。

コンポーネントがマルチスレッド(MTA)である場合は、一度に1つ以上のスレッドによって書き込まれると、インスタンス間で共有されるすべてのデータが破損する可能性があります。

+0

私のCOMサーバーはシングルスレッドです。だから私はCOMサーバーに複数の要求を置くことができますか?私はまた、COMサーバーが要求を出してすぐに戻るようにしたい。 URLを投稿するためにCOMサーバーに2番目のスレッドを実装する必要があるようです。 – anand

+0

コンポーネントがSTAの場合、複数の要求を送信できますが、要求が実行されると、後続のすべての要求は、最初の要求が返されるまで静かに中断され、その後、保留中の要求の1つが再開されます。これは、共有変数の破損を防ぐためにCOMによって自動的に行われます。内部に必要なスレッドの量を任意に増やすことができますが、同期を考慮する必要があります。 – sharptooth

関連する問題