0

ReactPHPループとHTTPServerを使用して、終わりのないループで実行されるphpスクリプトがあります

現在、ポート 80 の HTTPServer が必要な SQS キューを読み取る AWS Elastic Beanstalk Worker を使用しています。ここに私のPHPスクリプトがあります:

<?php

/* loading the base configuration files and defines */
require_once 'base/bootstrap.php';

$loop   = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http   = new React\Http\Server($socket);

$i = 0;
$j = 0;

$api = BaseClass::initiate(); // the initially loaded class setting up the environment

/**
 * The $loop React Event Loop will make sure that $api BaseClass required to be alive
 * is up-to-date managing the Environment
 */
$loop->addPeriodicTimer(3, function ($timer) use (&$i, &$j, $loop, &$api) {
    try {

        if ($i >= rand(300, 400)) {
            /* Refresh the Environment if any DB changes happen, like new clients added, etc. */
            $api = BaseClass::initiate();
        }

        /**
         * I Do my Work Here
         */

    } catch (Exception $e) {
        /**
         * Error Handling
         */
    }
    $i++;
    $j++;
});

/**
 * The $http React HTTP Server will listen to the SQS Queue and perform actions accordingly
 */
$http->on('request', function (React\Http\Request $request, React\Http\Response $response) use (&$api) {
    $request->on('data', function ($data) use (&$api, $request, $response) {
        try {
            $postData = json_decode($data, TRUE);

            /**
             * I process the Post Data here using $api loaded Class
             */

        } Catch (Exception $e) {
            /* Send an Error Message to the Queue */
            /**
             * Error Handling
             */
        }
    });
});

$socket->listen(80);
$loop->run();

私がこの構造を見ている理由は、$api がソケット接続を開き、$http サーバーが処理するために生きている必要があるからです。

nohup php /var/app/current/server.php &うまく動作しますが、新興サービスの作成を検討しています

私のUpStartスクリプトは、/etc/init/myscript.conf内で次のとおりです

#Info
start on startup
stop on shutdown
respawn
php /var/app/current/server.php

これは機能しません。どこが間違っているのかわかりません。

助言がありますか?

4

1 に答える 1