2017-08-29 16 views
5

WebSocketに問題があります。だから、私はかなり簡単な方法でsocketIOクライアントを通して私にいくつかのデータを提供するRpiを持っています。次のコードは、私はこのデータを取得するのですか方法を示しています。SocketIOと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> 

しかし、私は実装するために必要なものは少し複雑です。私は、クライアント側に到達する前に、いくつかのデータを扱うためにApacheサーバーを使用する必要があります。以下の画像は、私が構築しようとすると何を示しています。私は私のシナリオのための最善の解決策のように見えた、PHPwsを見つけるまで

enter image description here

が私の目標を達成するために、私はPHPのためのWebSocketサーバーとクライアントライブラリのいくつかを試してみました。 だから、私は例を読んで、私はそれらをテストし、私は次のコードでRPIに接続しようとしたまですべてがうまくいった:

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(); 

私は、多かれ少なかれDevristoのgithubのからthis exampleを撮影しました。

サーバー側からは、プログラムの実行中にエラーやメッセージがスローされません。

PHPwsでここで構築したいものを構築することは可能ですか? もしそうならば、PHPwsサンプルコードが表示されたRpiサーバーに正しく接続していますか?

答えて

0

ことが可能です:

[ノード]ソケットサーバー (成功)クライアントの接続イベントをチェックするためにノードで

シンプルsocket.ioサーバ(これはあなたのRPiだろう)。

var io = require('socket.io')(1337); 
io.on("connection",function(socket){console.log("[+] client",socket.id);}) 

Elephant.IO我々のセットアップを使用して[PHP]ソケットクライアント

クライアント(Client Example for Socket.IO v2.0)あなたが「に関する表示されます。このシンプルなクライアント/サーバーの例では

<?php 
use ElephantIO\Client; 
use ElephantIO\Engine\SocketIO\Version2X; 
require __DIR__ . '/vendor/autoload.php'; 
$client = new Client(new Version2X('http://localhost:1337', [ 
'headers' => [ 
    'X-My-Header: websocket rocks', 
    'Authorization: Bearer 12b3c4d5e6f7g8h9i' 
] 
])); 
$client->initialize(); 
$client->emit('broadcast', ['foo' => 'bar']); 
$client->close(); 

ブラウザが開いたときにノードサーバの「接続」イベントclient.php