我在使用websockets時遇到了一些問題。所以,我有一個Rpi,它以一種非常簡單的方式通過一個socketIO客戶端提供了一些數據。下面的代碼顯示瞭如何做去得到這樣的數據:嘗試使用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服務器來處理一些數據,然後才能到達客戶端。下圖顯示了什麼,我試圖建立:
爲了達到我的目標我試了WebSocket的服務器和客戶端庫PHP,直到我發現PHPws,它看起來像我的情況的最佳解決方案。 所以,我讀的例子,我對其進行測試,一切順利,直到我試圖用下面的代碼連接到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中構建我想在這裏構建的東西? 如果是這樣,我是否正確連接到de Rpi服務器並顯示PHPws示例代碼?