1

チャット システムが含まれている iOS アプリを開発しています (これらの手順を使用します)。API は LAMP サーバー上で実行されるため、クライアント/サーバーとサーバー/クライアントの間で通信するためのソケット ハンドラーとして PythonのTwistedの代わりにReactPhpを使用しました。

これは、ファイルsocket.phpに使用しているコードです

<?
require 'vendor/autoload.php';

$port = 1337;
$host = '127.0.0.1';

$app = function ($request, $response) {
    $response->writeHead(200, array('Content-Type' => 'text/plain'));
    $response->end('Hello '.time()."\n");
};

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

$http->on('request', $app);
echo 'Server running at http://'.$host.':'.$port."\n";

$socket->listen($port, $host);
$loop->run();
?>

次に、ターミナルでこれを実行します。

php socket.php

問題:

  1. 正常に動作しますが...ターミナルを閉じる(またはctrl + Zでプロセスを停止する)と、ポートはリッスンを停止します。Apache が起動した瞬間からソケットが常にリッスンするようにするにはどうすればよいですか?

  2. ターミナルを閉じた後 (ケース 1)、php socket.php再度実行しようとすると、次のメッセージが表示されます: tcp://127.0.0.1:1337 にバインドできませんでした: アドレスは既に使用されていますターミナルを閉じるとアクセスできなくなりますか?

4

2 に答える 2

-1

PHPスレッドがまだ実行されているようです。端末から:

ps -ef | grep php

出力:

501  7286  3848   0 10:09AM ttys002    0:00.08 php socket.php

スレッドを殺す:

kill 7286

Nino の更新: 2 番目の問題は、nohupコマンドを使用しても発生する可能性があります。

于 2016-11-17T09:15:34.817 に答える