C++로 작성된 응용 프로그램과 PHP로 스크립팅 된 웹 서버 간의 통신을 구현해야했습니다. 기본 아이디어는 C++ 응용 프로그램으로 소켓을 만들고 바인딩 한 다음 PHP 연결을 수신 대기하는 것입니다. 그런 다음 PHP는 TCP를 통해 데이터를 요청하는 메시지를 보내고 C++은 대답을 다시 보냅니다. 단일 헤더 요청, 단일 문자열 (JSON) 응답. 지금까지 그렇게 좋았습니다. 는 C++ (서버 측) 전송 데이터와 PHP 측 (클라이언트 측과동일한 기계에서 소켓 연결, PHP to C++ 및 back
<?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
?>
지금 나는 또한 데이터의 자동 업데이트를 구현하고 싶습니다 : 이 내가 PHP 측에 사용되는 코드입니다) 그들을 수집합니다. 데이터 업데이트는 1 분마다 완료해야합니다. 슬프게도 웹 개발에 대한 많은 경험이 없으므로 친절하게도 그에 대한 조언을 구하고 있습니다.
내가 할 수있는 가장 쉬운 방법은 알려진 메시지가 수신 될 때까지 PHP 코드를 반복하는 것입니다. 내가 직면 한 문제는 루프가 끝나고 PHP 스크립트가 끝날 때까지 데이터를 얻지 못한다는 것입니다. 문제를 극복하기 위해 PHP 측 소켓을 non-blocking으로 설정하려고 시도했습니다. socket_recv 옵션을 MSG_WAITALL에서 MSG_DONTWAIT로 바꾸었지만 아무 것도 변경되지 않았습니다. 그런 다음 PHP 스크립트를 벗어나려고했지만 매 초마다 데이터를 얻으려면주기가 필요하기 때문에 완료 할 수 없습니다. 플러스 루프 사이클 동안 PHP가 실행되는 아파치 서버에 503 오류가 발생했습니다. 서버를 사용할 수 없습니다. 왜 이런 일이 발생했는지, 수신 된 메시지 버퍼가 꽉 찼거나 스크립트가 너무 많은 리소스를 사용하는지 알 수 없습니다. 경험이 부족하여 그 이유를 이해할 수 없습니다. 내가 필요로하는 것을 수행 할 수있는 좋은 라이브러리가 있음을 알고 있지만 임베디드 머신에서 작업 중이므로 기본 라이브러리로 작업하는 데 한계가 있습니다.
Apache 서버에서 PHP를 사용하여 C++ 응용 프로그램에서 시간이 지정된 데이터를 얻으려면 어떻게해야합니까? 나는 무엇을 간과하고 있는가? 도움을 위해 미리 감사드립니다.
편집 : 수사학 질문이 삭제되었습니다.
[올바른 방향으로 나를 가리킨다]는 실제 질문이 아닙니다.] (https://meta.stackexchange.com/questions/226103/are-point-me-in-the-right-direction- 질문 가능) –