tmsolution / phpws
该包的最新版本(1.2)没有可用的许可证信息。
PHP WebSocket 服务器和客户端库
1.2
2018-02-06 12:05 UTC
Requires
- react/socket-client: 0.7.*
- zendframework/zend-http: 2.*
- zendframework/zend-log: 2.*
This package is not auto-updated.
Last update: 2024-09-21 17:29:23 UTC
README
PHP WebSocket 服务器和客户端库。支持最新的 HyBi 规范,以及旧版 Chrome 版本和一些 Flash 回退解决方案所使用的旧 Hixie #76 规范。
该项目启动是为了为 http://www.u2start.com/ 带来更多交互功能。
功能
服务器
- Hixie #76 和 Hybi #12 协议版本
- Flash 客户端支持(也在同一端口上提供 XML 政策文件)
- 有关兼容的 Flash 客户端,请参阅 https://github.com/gimite/web-socket-js
- 原生 Firefox、Safari(iPod/iPhone)、Chrome 和 IE10 支持。使用 Flash 客户端,支持 Flash 的任何浏览器都可以正常工作(包括 IE6-9、Opera、Android 和其他旧版桌面浏览器)。
- Opera(移动版)原生支持 WebSocket,但默认禁用了支持。可以在 opera:config 中启用。
客户端
- 支持 Hybi/Hixie76
- 基于事件的异步 I/O
入门
最简单的方法是将 PHPWS 用作 Composer 依赖项。将以下内容添加到您的 composer.json 中
{ "repositories": [ { "type": "vcs", "url": "https://github.com/Devristo/phpws" } ], "require": { "devristo/phpws": "dev-master" } }
然后运行 php composer.phar install
为了验证其是否正常工作,在项目根目录中创建一个 time.php
require_once("vendor/autoload.php"); use Devristo\Phpws\Server\WebSocketServer; $loop = \React\EventLoop\Factory::create(); // Create a logger which writes everything to the STDOUT $logger = new \Zend\Log\Logger(); $writer = new Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); // Create a WebSocket server using SSL $server = new WebSocketServer("tcp://0.0.0.0:12345", $loop, $logger); $loop->addPeriodicTimer(0.5, function() use($server, $logger){ $time = new DateTime(); $string = $time->format("Y-m-d H:i:s"); $logger->notice("Broadcasting time to all clients: $string"); foreach($server->getConnections() as $client) $client->sendString($string); }); // Bind the server $server->bind(); // Start the event loop $loop->run();
并创建一个客户端 time.html 如下所示
<html> <head> <title>WebSocket TEST</title> </head> <body> <h1>Server Time</h1> <strong id="time"></strong> <script> var socket = new WebSocket("ws://:12345/"); socket.onmessage = function(msg) { document.getElementById("time").innerText = msg.data; }; </script> </body> </html>
现在,从命令行运行 time.php 并在浏览器中打开 time.html。您应该看到由 phpws 定期广播的当前时间。如果这成功了,您可能会对示例文件夹中的更复杂服务器感兴趣。
使用 Phpws 客户端入门
以下是一个用于托管在 http://echo.websocket.org 的 WebSocket 服务器的客户端。
require_once("vendor/autoload.php"); // Composer autoloader $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://echo.websocket.org/?encoding=text", $loop, $logger); $client->on("request", function($headers) use ($logger){ $logger->notice("Request object created!"); }); $client->on("handshake", function() use ($logger) { $logger->notice("Handshake received!"); }); $client->on("connect", function($headers) use ($logger, $client){ $logger->notice("Connected!"); $client->send("Hello world!"); }); $client->on("message", function($message) use ($client, $logger){ $logger->notice("Got message: ".$message->getData()); $client->close(); }); $client->open(); $loop->run();
已知问题
- 缺少 ORIGIN 检查(可以在 onConnect 中手动使用 getHeaders() 实现,当您不喜欢 Origin 标头时断开用户连接)
- 不支持 HyBi 规范中的扩展数据。
需求
服务器
-
PHP 5.4
-
为服务器打开端口
-
PHP OpenSSL 模块以运行加密连接的服务器
-
http://pecl.php.net/package/pecl_http 因为它是 Zend\Uri 的依赖项。
-
Composer 依赖项 * 这些将在使用 phpws 作为 composer 包时自动安装。
-
Reactphp
-
ZF2 Logger
客户端
- PHP 5.4
- 实现 HyBi (#8-#12) 草案版本的服务器
- PHP OpenSSL 模块以使用 SSL 连接(wss:// uris)