尝试使用SocketIO和PHPws在服务器之间创建套接字
问题描述:
我在使用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示例代码?
答
这是可能的:
[节点]套接字服务器(这将是你的RPi
)在节点
简单socket.io服务器来检查 (成功)客户端连接的事件。
var io = require('socket.io')(1337);
io.on("connection",function(socket){console.log("[+] client",socket.id);})
[PHP]插孔客户
使用Elephant.IO
我们建立一个客户端(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