私は、C++で書かれたアプリケーションとPHPで書かれたWebサーバの間の通信を実装しなければなりませんでした。 基本的な考え方は、C++アプリケーションでソケットを作成し、それをバインドしてPHPへの接続を待ち受けることでした。 PHPはTCPを介してデータを要求するメッセージを送信し、C++は答えを返信します。単一ヘッダー要求、単一文字列(JSON)応答。 これまでのところ、とても良いです。 これは私がPHP側に使用するコードです:同じマシンでのソケット接続、PHPからC++、そしてバック
<?php
error_reporting(E_ALL);
$service_port = 8080;
$address = 'localhost';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
}
$in = "request1";
$out = '';
socket_write($socket, $in, strlen($in));
$buf = 'This is my buffer.';
if (false !== ($bytes = socket_recv($socket, $buf, 2048, MSG_WAITALL))) {
echo "Read $bytes bytes from socket_recv(). Closing socket...";
} else {
echo "socket_recv() failed; reason: " . socket_strerror(socket_last_error($socket)) . "\n";
}
socket_close($socket);
echo $buf . "\n";
//elaborate the $buf
?>
今、私はCで、また、データの自動更新を実装したいと思い++(サーバー側)データとPHPの送信側(クライアント側)収集する。 データの更新は1分ごとに行う必要があります。 悲しいことに、私はWeb開発の経験があまりないので、そのことについていくつかのアドバイスをお願いします。
私ができる最も簡単なことは、既知のメッセージが受信されるまでPHPコードをループすることでした。私が直面した問題は、ループが終了してPHPスクリプトが終了するまでデータを取得しないということです。 この問題を解決するために、私はPHPソケットを非ブロックに設定しようとしました。 socket_recvオプションMSG_WAITALLをMSG_DONTWAITに置き換えましたが、何も変更されませんでした。その後、私はPHPスクリプトから抜け出そうとしましたが、毎秒データを取得するためにはサイクルを繰り返す必要があるため、実行できません。 さらに、ループサイクル中に、PHPが実行されているApacheサーバーが503エラー、Server Unavailableを取得しているという別の問題が発生しました。 私はなぜそれが起こるか、受信したメッセージバッファがいっぱいであるか、またはスクリプトのリソースが多すぎるかどうかわかりません。 私の経験不足のため、私はなぜそれを理解できません。 私は必要なものを実行するのに良いライブラリーがあることを知っていますが、私は組み込みマシンで作業していますので、基本ライブラリーでは動作しません。
ApacheサーバでPHPを実行して、C++アプリケーションからタイムデータを取得するにはどうすればよいですか?私は何を見落としていますか? ご協力いただきありがとうございます。
編集:修辞的な質問が削除されました。
[なぜ私が正しい方向に向くのは実際の問題ではありません]](https://meta.stackexchange.com/questions/226103/are-point-me-in-the-right-direction-質問可) –