2

私はやや初心者です。
私はCodeigniterでソーシャルアプリを書いています。ユーザーがログインしたら、ユーザーネットワークの準備、メールの送信、おすすめの友達のリストの作成など、さまざまなことを行う必要があります。これらのそれぞれを実行する関数はすでに作成されています。

関数SignUpを持つメインコントローラーインデックスがあるとしましょう。

サインアップ後、ユーザーをダッシュ​​ボードコントローラーにリダイレクトしたいのですが、バックグラウンドで実行したい

  1. BuildNetwork
  2. FindMatches
  3. メールを送る

バックグラウンドでタスクを実行する方法がわかりません。だから、これらの関数を次々と呼び出すシェルスクリプトを書けるのではないかと思っていました。
このスクリプトをCodeigniterを介して呼び出し、UserIdを渡します。
次に、このスクリプトは個々の関数を呼び出し、userIdをそれらに渡します。

誰か教えてもらえますか

  1. これが正しいアプローチである場合
  2. それはどのように行われますか(この方法または他の方法で)
4

1 に答える 1

2

代わりにキューシステムを使用することをお勧めします。beanstalk(およびPHPライブラリpheanstalk)のようなものをチェックアウトしてください。

次に、実行したいことごとにジョブをキューに入れ、バックグラウンドプロセス(cronなど)でジョブをフェッチして実行します。

http://kr.github.com/beanstalkd/ https://github.com/pda/pheanstalk/

したがって、SignUp関数では、ジョブを作成してキューに入れ、さまざまなタイプのジョブごとにキューを使用してから、キューごとにジョブコンシューマーを設定できます。

// some pseudo code

function signUp()
{
    $jobData = json_encode(array(
        'template' => 'newUser',
        'to'       => 'john@example.com'
    ));
    $this->pheanstalk->useTube('OutboundEmails')->put($jobData);

    // add other jobs for other tasks here too
}

次に、コンシューマースクリプトを実行するcronスクリプトを作成できます。

// pseudo for this mail consumer

$pheanstalk->watch('OutboundEmails')->ignore('default');

while ($job = $pheanstalk->reserve())
{
    // send the email using the data in the job
    $job->getData() // returns your JSON
}

お役に立てば幸いです。

于 2013-03-12T20:32:53.273 に答える