roman444uk/sse

一个易于使用的、面向对象的Server-Sent Events库

v1.2.0 2023-06-23 02:05 UTC

This package is not auto-updated.

Last update: 2024-09-28 03:03:11 UTC


README

License Build Status

一个易于使用的、面向对象的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