warriorxk / phpwebsockets
支持使用套接字对进行IPC的WebSocket库
3.1.3
2023-06-29 11:40 UTC
Requires
- php: ^7.4.0 || ^8.0.0
- ext-sockets: *
- psr/log: ^1.0
Requires (Dev)
- ext-json: *
- ext-pcntl: *
- phpunit/phpunit: ^9.6
README
PHP库,用于接收和创建WebSocket连接,我们旨在100%符合WebSocket RFC标准,并使用Autobahn测试套件来确保这一点。目前,服务器和客户端都100%符合Autobahn测试套件(除了几个非严格警告),WebSocket的压缩扩展将在以后实现。
服务器
对于WebSocket服务器,应使用带有绑定地址和端口的\PHPWebSockets\Server实例。为了方便使用,您可以使用UpdatesWrapper类,这将触发设置在基本函数上的某些可调用项。
一个基本的WebSocket回显服务器示例:
require_once __DIR__ . '/vendor/autoload.php'; $wrapper = new \PHPWebSockets\UpdatesWrapper(); $wrapper->setMessageHandler(function(\PHPWebSockets\AConnection $connection, string $message, int $opcode) { echo 'Got message with length ' . strlen($message) . PHP_EOL; $connection->write($message, $opcode); }); $server = new \PHPWebSockets\Server('tcp://0.0.0.0:9001'); while (TRUE) { $wrapper->update(0.1, $server->getConnections(TRUE)); }
如果需要更多控制,您可以直接调用$server->update(0.1);
而不是使用包装器,这将产生可响应的更新对象。
客户端
为了连接到服务器,应构造\PHPWebSockets\Client类,并使用connect($address, $port, $path)方法连接。为了方便使用,您还可以再次使用UpdatesWrapper类或使用$server->update(0.1);
以获得更好的控制。
一个基本的WebSocket回显客户端示例:
require_once __DIR__ . '/../vendor/autoload.php'; $wrapper = new \PHPWebSockets\UpdatesWrapper(); $wrapper->setMessageHandler(function(\PHPWebSockets\AConnection $connection, string $message, int $opcode) { echo 'Got message with length ' . strlen($message) . PHP_EOL; $connection->write($message, $opcode); }); $client = new \PHPWebSockets\Client(); if (!$client->connect('tcp://:9001/webSocket')) { die('Unable to connect to server: ' . $client->getLastError() . PHP_EOL); } while (TRUE) { $wrapper->update(0.1, [$client]); }