TP6 SSE通信

Last modified date

TP6

设置响应头

header("Content-type: text/event-stream");
header("Cache-Control: no-cache");
header("Connection: keep-alive");
header("Access-Control-Allow-Origin: *");

模拟查询

        $ti = time()+10;
        while(true){
            if(time() >= $ti){
                break;
            }
            
        }

返回数据

注:方法末尾是exit();结束,信息用echo返回。

retry:重连的时间

id:浏览器重连时的id

event:js接收时的方法

data:发送的参数

        $aa['salt'] = '现在时间已大于'.$ti;
       $cc = json_encode($aa);
       $data= <<<EOF
retry: 1000\n
id:100000\n
event: onmessage\n
data: $cc\n\n
EOF;
    echo $data; 
exit();

完整方法

    public function index(Request $request)
    {
        header("Content-type: text/event-stream");
        header("Cache-Control: no-cache");
        header("Connection: keep-alive");
        header("Access-Control-Allow-Origin: *");

        $ti = time()+10;
        while(true){
            if(time() >= $ti){
                break;
            }
            
        }
        $aa['salt'] = '现在时间已大于'.$ti;
        $cc = json_encode($aa);
        $data= <<<EOF
retry: 1000\n
id:100000\n
event: onmessage\n
data: $cc\n\n
EOF;
        echo $data; 
        exit();

      
    }

JS

let source = new EventSource('http://tp6.a.wjarpg.top/sse?id=19c');
        
        console.log('readyState',source.readyState);
        // return;
        source.onopen = function(event) {
            console.log('onopen', event);
        };
        source.onmessage = function(event) {
            let re = JSON.parse(event.data);
            console.log('onmessage', re);
        };
        
        source.onerror = function(event) {
            console.log('onerror',event);
            // source.close();
        };

weijiang