roman444uk/ sse
一个易于使用的、面向对象的Server-Sent Events库
v1.2.0
2023-06-23 02:05 UTC
Requires
- php: >=5.3.9
- symfony/http-foundation: ~6.0
Requires (Dev)
- phpunit/phpunit: ~4.2 | ~5.0
Suggests
- predis/predis: For using RedisMechnism
- symfony/polyfill-apcu: For APCMecnism on PHP < 7.0
This package is not auto-updated.
Last update: 2024-09-28 03:03:11 UTC
README
一个易于使用的、面向对象的Server-Sent Events库
安装
要安装此包,您需要composer。
运行composer require roman444uk/sse
用法
服务器端(PHP)
<?php require_once('/path/to/vendor/autoload.php'); //Load with ClassLoader use Sse\Event; use Sse\SSE; //create the event handler class YourEventHandler implements Event { public function update(){ //Here's the place to send data return 'Hello, world!'; } public function check(){ //Here's the place to check when the data needs update return true; } } $sse = new SSE(); //create a libSSE instance $sse->addEventListener('event_name', new YourEventHandler());//register your event handler $sse->start();//start the event loop ?>
客户端(javascript)
var sse = new EventSource('path/to/your/sse/script.php'); sse.addEventListener('event_name',function(e){ var data = e.data; //handle your data here },false);
设置
创建libSSE实例后,有一些设置可供您控制行为。以下是库提供的设置。
<?php require_once('/path/to/vendor/autoload.php'); //Load with ClassLoader use Sse\SSE; $sse = new SSE(); $sse->set($property, $value);
属性的直接访问通过魔术方法保持与向后兼容。
<?php require_once('/path/to/vendor/autoload.php'); //Load with ClassLoader use Sse\SSE; $sse = new SSE(); $sse->exec_limit = 10; //the execution time of the loop in seconds. Default: 600. Set to 0 to allow the script to run as long as possible. $sse->sleep_time = 1; //The time to sleep after the data has been sent in seconds. Default: 0.5. $sse->client_reconnect = 10; //the time for the client to reconnect after the connection has lost in seconds. Default: 1. $sse->use_chunked_encodung = true; //Use chunked encoding. Some server may get problems with this and it defaults to false $sse->keep_alive_time = 600; //The interval of sending a signal to keep the connection alive. Default: 300 seconds. $sse->allow_cors = true; //Allow cross-domain access? Default: false. If you want others to access this must set to true. ?> ## Updates 1. Add Support of Symfony Http Foundation Compoent 2. SSE use magic method instead of direct access 3. Add Redis and Memcahce Mechnism 4. Add SessionLike Mechnism 5. Fixed event loop handling where removing handlers at runtime can result in a broken state. 6. Use Symfony HttpFoundation StreamedResponse to replace the old version 7. Add Changelog and contributing guide. ## Special For PHP 5.3 and 5.4 If you see and error message like `your PHP version does not satisfy that requirement.`, please remove composer.lock and re-install it. ## Documentation You may find it here. [https://github.com/licson0729/libSSE-php/wiki/libSSE-docs](https://github.com/licson0729/libSSE-php/wiki/libSSE-docs) ## Development This is an active project. If you want to help me please suggest ideas to me and track issues or find bugs. If you like it, please consider star it to let more people know. ## Compatibility
兼容性
由于服务器端事件是一个新的标准,并且仍在变化中,因此只有某些浏览器支持它。但是,服务器端事件的polyfill是可用的。此外,在共享主机上,它可能会禁用PHP的set_time_limit函数,并且库可能无法按预期工作。库中有一些设置可以修复它。
与框架的集成
Symfony
<?php use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sse\SSE; class DefaultController extends Controller { /** * @Route("/sse", name="sse") */ public function sseAction() { $sse = new SSE(); // Add your event listener return $sse->createResponse(); } }
Laravel
请使用laravel-sse。
Yii2
请使用yii2-sse。
贡献
请参阅CONTRIBUTING.md。