Mam problem z internetowymi gniazdami. Mam więc Rpi, który dostarcza mi trochę danych za pośrednictwem klienta socketIO w całkiem prosty sposób. Poniższy kod pokazuje, w jaki sposób mogę uzyskać te dane:Próba utworzenia gniazda między serwerami za pomocą SocketIO i PHPws
<!DOCTYPE html>
<html>
<header>
<title>SocketIO test</title>
<script src="http://192.168.5.5:8000/socket.io/socket.io.js"></script>
</header>
<body>
<script type="text/javascript">
var client = io.connect('http://192.168.5.5:8000');
client.on('connect', function() {
console.log('connected');
});
client.on('raw', function(data){
console.log(data);
});
client.on('state', function(data){
console.log(data);
});
</script>
</body>
Jednak to, co potrzebne do wdrożenia jest trochę bardziej skomplikowane. Muszę użyć serwera Apache do przekazania pewnych danych zanim dotrą one do klienta. Poniższy rysunek pokazuje, co staram się budować:
Aby osiągnąć mój cel Próbowałem kilku serwerów websocket i biblioteki klienta dla PHP aż znalazłem PHPws, który wygląda jak najlepszego rozwiązania dla mojego scenariusza. Więc czytam przykłady, przetestować je i wszystko szło dobrze dopóki nie próbowałem połączyć się z Rpi z następującego kodu:
require_once("../vendor/autoload.php");
$loop = \React\EventLoop\Factory::create();
$logger = new \Zend\Log\Logger();
$writer = new Zend\Log\Writer\Stream("php://output");
$logger->addWriter($writer);
$client = new \Devristo\Phpws\Client\WebSocket("ws://192.168.5.5:8000", $loop, $logger);
$client->on("connect", function() use ($logger, $client){
$logger->notice("Or we can use the connect event!");
$client->send("Hello world!");
});
$client->on("raw", function($message) use ($client, $logger){
$logger->notice("Got message: ".$message->getData());
$client->close();
});
$client->open()->then(function() use($logger, $client){
$logger->notice("We can use a promise to determine when the socket has been connected!");
});
$loop->run();
mam mniej lub bardziej brane this example z github Devristo użytkownika.
Po stronie serwera wykonanie programu nie powoduje żadnego błędu ani komunikatu.
Czy jest możliwe zbudowanie tego, co chcę tutaj zbudować za pomocą PHPws? Jeśli tak, czy prawidłowo łączę się z serwerem de Rpi z pokazanym kodem przykładowym PHPws?