danielealbano / php-websocket-s2c
0.3.1
2016-08-16 06:14 UTC
This package is not auto-updated.
Last update: 2024-09-15 02:16:45 UTC
README
介绍
php-websocket-s2c 是一个 PHP Websocket 原生实现,能够通过 Apache、nginx 或其他任何 Web 服务器和代理服务器提供服务,而无需进行任何特定配置。
PHP 中的 WebSocket 支持几乎不存在,因为通常需要在 Web 服务器/代理服务器级别提供支持。本实现采用的方案允许仅从服务器向客户端发送数据包,而无需在代理服务器和/或 Web 服务器上更改任何配置参数,s2c 后缀代表 服务器到客户端。
支持的功能
该库支持以下功能
- 服务器到客户端消息(文本(json)、二进制、ping/pong)
- 分段消息(用于流式传输数据)
- 数据包大小可达 2^64
- 尝试自动禁用 HTTP 压缩(gzip)和分块
- WebSocket 协议(Sec-Websocket-Protocol 标头)
- 协议版本 13 (https://en.wikipedia.org/wiki/WebSocket#Browser_implementation)
不支持或未测试的内容
- 扩展(多路复用、压缩等)
- SSL/TLS
该库已在 Apache 2.2 上使用 mod_php 对 PHP 5.4、PHP 5.5 和 PHP 5.6 进行了测试
错误
该库非常年轻,并使用技巧来避免启动独立的 Web 服务器。如果某些功能无法正常工作,在提交问题之前,请检查您的 Web 服务器是否启用/请求了以下内容:
- 压缩已启用(Content-Encoding 标头应不存在或其值为 identity);
- 分块已启用(Transfer-Encoding 标头应不存在或其值为 identity)。
在报告问题时,请记住说明以下内容:
- 如果 Content-Length 标头有不同的值,则不为零;
- 如果 Connection 标头不存在或其值不是 Upgrade;
- 如果 Upgrade 标头不存在或其值不是 websocket;
- 您的 Web 服务器(名称和版本);
- 如果您使用 php 作为模块或作为 fastcgi;
- 如果您使用代理服务器,如果是,请说明哪一种。
示例
普通 WebSocket
创建 WebSocket 服务器
require_once('src/WebSocket.php'); require_once('src/Frame.php'); $ws = new WebsocketS2C\WebSocket();
使用 composer 不需要包含源代码。
检查是否请求了 WebSocket
if ($ws->isWebsocket() == false) { echo 'Not a websocket!'; die(); }
接受连接
$ws->accept();
发送文本帧(第一个示例)
$ws->text(utf8_encode('This is a test!'));
发送文本帧(第二个示例)
for($i = 0; $i < 3; $i++) { $ws->text(utf8_encode('Loop ' . $i)); sleep(1); }
发送 json 帧数据
$ws->json([ 'hello' => 'world' ]);
发送二进制(blob)帧
$ws->binary('This is a test!');
流式传输数据
$isFirst = true; $ws->text('[', false, false); foreach([ 'this', 'is', 'a', 'multipart', 'message' ] as $part) { if ($isFirst == false) { $ws->text(',', false, false); } $ws->json([ 'alot' => true, 'of' => true, 'data' => $part ], false); $isFirst = false; } $ws->text(']');