hhxsv5/php-sse
Composer 安装命令:
composer require hhxsv5/php-sse
包简介
A simple and efficient library implemented HTML5's server-sent events by PHP, is used to real-time push events from server to client, and easier than Websocket, instead of AJAX request.
README 文档
README
A simple and efficient library implemented HTML5's server-sent events by PHP, is used to real-time push events from server to client, and easier than Websocket, instead of AJAX request.
Requirements
- PHP 5.4 or later
Installation via Composer(packagist)
composer require "hhxsv5/php-sse:~2.0" -vvv
Usage
Run demo
- Run PHP webserver
cd examples php -S 127.0.0.1:9001 -t .
- Open url
http://127.0.0.1:9001/index.html
Javascript demo
Client: receiving events from the server.
// withCredentials=true: pass the cross-domain cookies to server-side const source = new EventSource('http://127.0.0.1:9001/sse.php', {withCredentials: true}); source.addEventListener('news', function (event) { console.log(event.data); // source.close(); // disconnect stream }, false);
PHP demo
Server: Sending events by pure php.
use Hhxsv5\SSE\Event; use Hhxsv5\SSE\SSE; use Hhxsv5\SSE\StopSSEException; // PHP-FPM SSE Example: push messages to client header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header('Connection: keep-alive'); header('X-Accel-Buffering: no'); // Nginx: unbuffered responses suitable for Comet and HTTP streaming applications $callback = function () { $id = mt_rand(1, 1000); $news = [['id' => $id, 'title' => 'title ' . $id, 'content' => 'content ' . $id]]; // Get news from database or service. if (empty($news)) { return false; // Return false if no new messages } $shouldStop = false; // Stop if something happens or to clear connection, browser will retry if ($shouldStop) { throw new StopSSEException(); } return json_encode(compact('news')); // return ['event' => 'ping', 'data' => 'ping data']; // Custom event temporarily: send ping event // return ['id' => uniqid(), 'data' => json_encode(compact('news'))]; // Custom event Id }; (new SSE(new Event($callback, 'news')))->start();
Symfony and Laravel demo
Server: Sending events by Laravel or Symfony.
use Hhxsv5\SSE\SSE; use Hhxsv5\SSE\Event; use Hhxsv5\SSE\StopSSEException; // Action method in controller public function getNewsStream() { $response = new \Symfony\Component\HttpFoundation\StreamedResponse(); $response->headers->set('Content-Type', 'text/event-stream'); $response->headers->set('Cache-Control', 'no-cache'); $response->headers->set('Connection', 'keep-alive'); $response->headers->set('X-Accel-Buffering', 'no'); // Nginx: unbuffered responses suitable for Comet and HTTP streaming applications $response->setCallback(function () { $callback = function () { $id = mt_rand(1, 1000); $news = [['id' => $id, 'title' => 'title ' . $id, 'content' => 'content ' . $id]]; // Get news from database or service. if (empty($news)) { return false; // Return false if no new messages } $shouldStop = false; // Stop if something happens or to clear connection, browser will retry if ($shouldStop) { throw new StopSSEException(); } return json_encode(compact('news')); // return ['event' => 'ping', 'data' => 'ping data']; // Custom event temporarily: send ping event // return ['id' => uniqid(), 'data' => json_encode(compact('news'))]; // Custom event Id }; (new SSE(new Event($callback, 'news')))->start(); }); return $response; }
Swoole demo
Server: Sending events by Swoole Coroutine Http Server. Install Swoole 4.5.x:
pecl install swoole.
use Hhxsv5\SSE\Event; use Hhxsv5\SSE\SSESwoole; use Swoole\Http\Request; use Swoole\Http\Response; use Swoole\Http\Server; use Hhxsv5\SSE\StopSSEException; // Swoole SSE Example: push messages to client $server = new Server('0.0.0.0', 5200); $server->set([ 'enable_coroutine' => true, 'max_coroutine' => 10000, // worker_num*10000 'reactor_num' => swoole_cpu_num() * 2, 'worker_num' => swoole_cpu_num() * 2, 'max_request' => 100000, 'buffer_output_size' => 4 * 1024 * 1024, // 4MB 'log_level' => SWOOLE_LOG_WARNING, 'log_file' => __DIR__ . '/swoole.log', ]); $server->on('Request', function (Request $request, Response $response) use ($server) { $response->header('Access-Control-Allow-Origin', '*'); $response->header('Content-Type', 'text/event-stream'); $response->header('Cache-Control', 'no-cache'); $response->header('Connection', 'keep-alive'); $response->header('X-Accel-Buffering', 'no'); $event = new Event(function () { $id = mt_rand(1, 1000); $news = [['id' => $id, 'title' => 'title ' . $id, 'content' => 'content ' . $id]]; // Get news from database or service. if (empty($news)) { return false; // Return false if no new messages } $shouldStop = false; // Stop if something happens or to clear connection, browser will retry if ($shouldStop) { throw new StopSSEException(); } return json_encode(compact('news')); // return ['event' => 'ping', 'data' => 'ping data']; // Custom event temporarily: send ping event // return ['id' => uniqid(), 'data' => json_encode(compact('news'))]; // Custom event Id }, 'news'); (new SSESwoole($event, $request, $response))->start(); }); $server->start();
License
hhxsv5/php-sse 适用场景与选型建议
hhxsv5/php-sse 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 187.14k 次下载、GitHub Stars 达 455, 最近一次更新时间为 2017 年 07 月 24 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「events」 「eventsource」 「sse」 「Server-Sent Events」 「sever-events」 「event-stream」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 hhxsv5/php-sse 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 hhxsv5/php-sse 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 hhxsv5/php-sse 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Библиотека для реализаций паттерна Pub/Sub
Instant real-time updates. Lightweight EventSource client receiving live messages via HTML5 Server-Sent Events (SSE). Fast stream processing built on top of ReactPHP's event-driven architecture.
Streaming, async HTML5 Server-Sent Events server (aka. SSE or EventSource)
Библиотека для реализаций паттерна Pub/Sub
Streaming, async HTML5 Server-Sent Events server (aka. SSE or EventSource)
Wireless Cross-Component Communication
统计信息
- 总下载量: 187.14k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 461
- 点击次数: 28
- 依赖项目数: 3
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-07-24
