0

私のプロジェクトはスタンドアロン アプリケーションでしたが、強力な CPU 使用率と移植性を同時に必要とするため、クライアントとサーバーに分割することにしました。複数のクライアントが 1 つのサーバーに接続できるようになりました。

1 対 1 の処理が仕事をするときは簡単でした。ここで、クライアントのリクエストを介して、同じ関数とスコープ領域を同時に何度も呼び出す必要があります。

サーバー側でクライアントのプロセスを互いに分離する方法を知る必要がありますか? 私の通信は非同期で、サーバーはリクエストを受け取り、新しいスレッドを開始します。クライアント情報を運ぶパラメーターと、ジョブIDとしての別のパラメーターを渡すと思います-クライアントが戻るのを助けるために、クライアントは複数のジョブを要求し、一部のジョブは他のジョブよりも早く終了します-

各呼び出しでクラス Process をインスタンス化する必要がありますか? 静的メソッドなどを使用できますか。説明があれば非常に役立ちます。

以下は、変更が必要なコードの一部です

class static readonly Data
{
    public variable listOfValues[]
}


class Process
{

    local variable bestValue



    function findBestValue(from, to)
    {
    ...
     if(processResult > bestValue) bestValue = processResult
    ...

    }

    ...

    for(i=0;i<10;i++) startThread(findBestValue(i*1000,i*1000+999));
...
}

編集:新しい Process クラスをインスタンス化し、クライアントごとに関数を呼び出し、ジョブが既に実行されているため、同じジョブに対して同じクライアントを無視する必要があると思います。

4

2 に答える 2

2

通信をサービスでラップし、WCFサービスとして構成できPerCallます(つまり、各要求は他の要求とは別に処理されます)。

したがって、同期化のものからビジネスロジックをクリーンアップします。スレッドの管理と作成は実装が難しくないため、これが最善の方法ですが、正しく実装してリソース消費を最適化することは困難です。

于 2011-03-24T12:49:39.383 に答える
2

アプリケーションの設計についてはあまり話さなかったので、WCFWebServicesを使用するのに理想的な問題だと思います。すべてのリクエストは独自のスレッドで開始されるため、設計によりクライアントを分離できます。WCFホストをスタンドアロンのアプリケーション/Windowsサービスとして作成できます。

于 2011-03-24T12:46:13.423 に答える