我们拥有高流量网站,2000个并发用户和每天250K独立用户,我们的后端技术是PHP 5.6,我们将在我们的网站上实施服务发送活动以从服务器获取通知号码(在其他世界中发送)通知编号到浏览器),我已经看到了一些在PHP中实现SSE的例子,作为一个例子
ClientSide:
if (!!window.EventSource)
{
var source = new EventSource('task.php');
source.addEventListener('message', function(e)
{
console.log(e.data);
//Do whatever with e.data
}, false);
}
PHP:
<?php
/**
EventSource is documented at
http://dev.w3.org/html5/eventsource/
*/
//a new content type. make sure apache does not gzip this type, else it would get buffered
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
/**
Constructs the SSE data format and flushes that data to the client.
*/
function send_message($id, $message, $progress)
{
$d = array('message' => $message , 'progress' => $progress);
echo "id: $id" . PHP_EOL;
echo "data: " . json_encode($d) . PHP_EOL;
echo PHP_EOL;
//PUSH THE data out by all FORCE POSSIBLE
ob_flush();
flush();
}
$serverTime = time();
//LONG RUNNING TASK
for($i = 0; $i < 10; $i++)
{
send_message($serverTime, 'server time: ' . date("h:i:s", time()) , ($i+1)*10);
//Hard work!!
sleep(1);
}
send_message($serverTime, 'TERMINATE');
(大多数解决方案是通过无限(或长时间)循环实现它并在短时间内休眠)这样可以保持每个用户的线程直播并且像我们这样的高流量我虽然它可能很大问题下, 使用 PHP 实施服务器发送事件的好方法是什么? 高流量网站的后端?
注意:我看到了这个https://github.com/licson0729/libSSE-php,但它似乎无法通过良好的性能解决方案来处理它。
答案 0 :(得分:1)
在高流量网站中使用PHP后端实施服务器发送事件的好方法是什么?
简单:使用可以处理SSE连接负载的专用服务器(软件)。
它不必用PHP编写。例如,我使用了非常好的Nginx模块,PHP后端使用curl将事件推送给它们:
如果你想要一个纯PHP解决方案,那么你可能需要自己实现一个服务器,而不是依赖于nginx / apache。基本上你需要一个事件循环,监听套接字,http协议等。像ReactPHP这样的框架应该可以帮助你入门。