リモートソケットからデータを受信するためのミニ「デーモン」として機能するPHPスクリプトを作成しようとしています。リモートサーバーはAsteriskVoIPサーバーであり、AMIイベント通知を受信するためにAsterisk Management Interface(AMI)に接続します。接続は、これまでの使用に十分安定している常時接続のSSHトンネル(autosshを使用)を介して行われます。
これが計画です...
- SSHトンネルのローカルポートに接続するPHPスクリプト。これは、他端のリモートポートに転送します
fsockopen()
。pfsockopen()
- PHPスクリプトはCLIから実行されます。何らかの理由で、PHPスクリプトが停止していないことを確認するために、cronジョブに何らかのシェルスクリプトが必要だと思います。
- このPHPスクリプトを永続的に実行し、ソケットに永続的に接続して、データが相手側から公開されるたびにデータを受信する必要があります。
- イントラネットサーバーには十分なリソースがあるため(犯罪的に十分に使用されていないため)、メモリとCPUは問題になりませんが、同様に、このスクリプトが制御不能になることは望ましくありません。
- PHPスクリプトは、ソケットの反対側に時折表示されるデータに反応し、MySQLデータベースにデータを挿入または更新する場合があります。もちろん、MySQL接続をハングさせたままにするのではなく、必要に応じて開閉します。
まず第一に、これは決してうまくいかないひどい考えですか?
PHPは、このような小さなデーモンにはおそらく最適な言語ではないことを認識していますが、以前はCLIでPHPを使用して成功したことがあり、最近では最も快適な言語です。
ソケットのもう一方の端でデータが公開されたときに動作を開始できるPHP関数はありますか?
またはfread()
、このようにループするだけでしょうか...
while (!feof($socket)) {
$output .= fread($socket, 8192);
}
ループオプションは少し混乱しているように見えるので、スクリプトがソケットに接続されたままで、基本的にデータが表示されるまでアイドル状態になる別の方法があるかどうか疑問に思っています。
永続的に実行されているPHPスクリプトをソケットに接続することを検討する場合、どのような短所/落とし穴に注意する必要がありますか?
乾杯、B