나는 2 개의 클라이언트가있는 작은 PHP 서버를 만들고, php (장치 a)에 연결하고 다른 장치 (장치 b)를 제어한다.PHP - echo do other client
장치 a는 PHP에 대한 요청을 만듭니다. 지금은 그 명령을 장치 b에 푸시하고 싶습니다. 장치 B에 에코 할 수있는 방법이 있습니까? 또는 장치 b에 요청을하려면? 장치 B가 어떤 종류 (들어오는 연결 진짜로을 받아 소프트웨어)의 서버를 실행하지 않는
는
나는 2 개의 클라이언트가있는 작은 PHP 서버를 만들고, php (장치 a)에 연결하고 다른 장치 (장치 b)를 제어한다.PHP - echo do other client
장치 a는 PHP에 대한 요청을 만듭니다. 지금은 그 명령을 장치 b에 푸시하고 싶습니다. 장치 B에 에코 할 수있는 방법이 있습니까? 또는 장치 b에 요청을하려면? 장치 B가 어떤 종류 (들어오는 연결 진짜로을 받아 소프트웨어)의 서버를 실행하지 않는
는
기기로 푸시 중은 가능하지만 기기에 따라 다릅니다. http://en.wikipedia.org/wiki/Push_technology#Long_polling
매우 간단합니다 :
http://code.google.com/p/phpwebsocket/
이또 다른 방법은 PHP에서 구현하기 쉽습니다 longpolling 것 : 해결책은 추가 읽기는 다음 링크를 참조 WebSocket을 것 서버 측 longpolling 구현 :
$ts = time();
while(true) {
// if there's something new, send the response to the server
// if not, continue with the loop
if($response = getSuperAwesomeResponse()) {
print $response;
break;
}
// timeout after 60 seconds
if(($ts + 60) > time()) {
break;
}
sleep(1);
}
클라이언트 측에서는 일종의 아약스 호출을 보내면됩니다.
아니오 (난 단지 장치 B에 한 문자를 보낼 필요). 그렇다면 기기에 대한 HTTP 요청 (예 : file_get_contents
포함)을 쉽게 만들거나 나만의 맞춤 연결 프로토콜 (sockets)을 사용할 수 있습니다. 또한 동일한 기능을 사용할 수 있지만 약간 다른 방식으로 작동하는 다른 옵션이 있습니다.
장치에서 서버가 실행되고 있지 않으면 서버를 계속 폴링하여 명령이 있는지 확인하십시오. 이것은 설정하기 쉽지만 (서버가 이미 있음) 효율적이지 않습니다.
장치 B는 서버에 대한 클라이언트 연결을 열어 데이터 수신을 기다릴 수 있습니다. 데이터가 들어 오면 장치 B에서 실행중인 클라이언트가이를 반향시킬 수 있습니다.
PHP 볼, 네트워크 소켓에 대한 액세스를 제공합니다 http://www.php.net/manual/en/book.sockets.php
소켓 및 대기열에 대한 더 높은 레벨의 액세스 권한 허용 LibEvent 및 ZMQ의 일부 PHP 예제 코드 만들기 사용 :
이벤트 기반 서버 :
<?php
// create base and event
$base = event_base_new();
$event = event_new();
// Allocate a new context
$context = new ZMQContext();
// Create sockets
$rep = $context->getSocket(ZMQ::SOCKET_REP);
// Connect the socket
$rep->bind("tcp://127.0.0.1:5555");
// Get the stream descriptor
$fd = $rep->getsockopt(ZMQ::SOCKOPT_FD);
// Define event callback function
$fnc = function ($fd, $events, $arg) {
static $msgs = 1;
echo "CALLBACK FIRED" . PHP_EOL;
if($arg[0]->getsockopt (ZMQ::SOCKOPT_EVENTS) & ZMQ::POLL_IN) {
echo "Got incoming data" . PHP_EOL;
var_dump ($arg[0]->recv());
$arg[0]->send("Got msg $msgs");
if($msgs++ >= 10) event_base_loopexit($arg[1]);
}
};
// set event flags
event_set($event, $fd, EV_READ | EV_PERSIST, $fnc, array($rep, $base));
// set event base
event_base_set($event, $base);
// enable event
event_add($event);
// start event loop
event_base_loop($base);
ZeroMQ 클라이언트 :
01 23,516,<?php
// Create new queue object
$queue = new ZMQSocket(new ZMQContext(), ZMQ::SOCKET_REQ, "MySock1");
$queue->connect("tcp://127.0.0.1:5555");
// Assign socket 1 to the queue, send and receive
var_dump($queue->send("hello there!")->recv());
while 루프 내에 'sleep'호출을 추가하는 것을 잊지 마십시오. 그렇지 않으면 엄청난 양의 CPU 시간이 소비됩니다. – enricog
귀하의 의견을 보내 주셔서 감사합니다. 나는 그것을 잊었다. :) –