首页 > 编程语言 >EventSource的php与前端事件推送

EventSource的php与前端事件推送

时间:2023-02-25 23:33:23浏览次数:42  
标签:推送 data EOL EventSource str message php evt

EventSource

EventSource 是服务器推送的一个网络事件接口。一个 EventSource 实例会对 HTTP 服务开启一个持久化的连接,以text/event-stream 格式发送事件,会一直保持开启直到被要求关闭。

一旦连接开启,来自服务端传入的消息会以事件的形式分发至你代码中。如果接收消息中有一个事件字段,触发的事件与事件字段的值相同。如果没有事件字段存在,则将触发通用事件。

WebSockets,不同的是,服务端推送是单向的。数据信息被单向从服务端到客户端分发。当不需要以消息形式将数据从客户端发送到服务器时,这使它们成为绝佳的选择。例如,对于处理社交媒体状态更新,新闻提要或将数据传递到客户端存储机制(如 IndexedDB 或 Web 存储)之类的,EventSource 无疑是一个有效方案。

php代码(服务端)

主要借鉴下面两个文章
关于长文本如何分段发送
关于发送的参数说明
创建文件message.php

<?php
header("Access-Control-Allow-Origin:*");
header('X-Accel-Buffering: no');
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
ob_end_clean();
ob_implicit_flush(1);

while(1) {
    $data = [
        "id" => time(),
        "message" => '欢迎来到helloweba,现在是北京时间'.date('Y-m-d H:i:s')
    ];
    $xh = $xh + 1;
    returnEventData($data,"message",$xh);
    sleep(2);
}

function returnEventData($returnData, $event='message', $id=0, $retry=0) {
    $str = '';
    if($id>0) {
        $str .= "id: {$id}".PHP_EOL;
    }
    if($event) {
        $str.= "event: {$event}".PHP_EOL;
    }
    if($retry>0) {
        $str .= "retry: {$retry}".PHP_EOL;
    }
    if(is_array($returnData)) {
        $returnData = json_encode($returnData);
    }
    $str .= "data: {$returnData}".PHP_EOL;
    $str .= PHP_EOL;
    echo $str;
}
?>

前端js代码

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>EventSource测试</title>
</head>
<body>
	<div>EventSource测试</div>
	<ul></ul>
	<script>
		console.log("1111")
		//这里填写要链接的地址
		var evtSource = new EventSource('message.php');
		evtSource.addEventListener('message',function(evt){
			// console.log(evt)
			document.querySelector("ul").innerHTML+=("<li>"+JSON.parse(evt.data).message+"</li>")
		})
		// evtSource.onmessage=(evt)=>{
		// 	console.log(evt.data)
		// 	document.querySelector("ul").innerHTML+=("<li>"+JSON.parse(evt.data).message+"</li>")
		// 	//console.log(e.data)
		// }
	</script>
</body>
</html>

标签:推送,data,EOL,EventSource,str,message,php,evt
From: https://www.cnblogs.com/tn666/p/17155715.html

相关文章

  • 【编程入门】应用市场(php版)
    目标为编程初学者打造入门学习项目,使用各种主流编程语言来实现。让想学编程的,一个都不落下。上述基本涵盖了当前编程开发所有主流语言。左侧为前端版本:安卓、iOS、鸿蒙......
  • PHP Windows 下 XAMPP 的 xdebug 配置
    在IntelliJ下调试PHP的断点有时候还是比较困惑的。同时根据你使用的xdebug配置也有关系。xdebug2.x下面的配置是xdebugVersion2的配置,如果你使用xdebug3.......
  • windows10中安装 php的 pecl_http扩展
    在下面的网址中下载对应版本的三个dll文件  php_raphf.dll , php_propro.dll , php_http.dllhttp://windows.php.net/downloads/pecl/releases/在php.ini中增下......
  • Thinkphp 5.0.23一次艰难的利用(绕过限制)
    今天打算做点好事,看看有没有被别人黑掉的站,修复一波。刚刚好,找到一个。用goby一扫,thinkphp5.x漏洞   验证了一下,是没有问题的然后准备用工具写下shell   ......
  • PHP 留言本代码3
    以下是一个简单的PHP留言本代码:index.php<!DOCTYPEhtml><html><head><title>留言本</title></head><body><h1>留言本</h1><?php//显示所......
  • 一个简单的 PHP 留言本代码示例
    以下是一个简单的PHP留言本代码示例:在HTML文件中创建表单 <!DOCTYPEhtml><html><head><title>留言板</title></head><body><h1>留言板</h1>......
  • PHP 留言本代码示例2
    以下是一个简单的PHP留言本代码示例:index.php:<!DOCTYPEhtml><html><head><title>留言本</title></head><body><h1>留言本</h1><?php//......
  • php 调用chatgpt api
    前提:要有chatgpt账号,不会注册的关注抖音:21402780125,有免费教程!!要在PHP中调用ChatGPTAPI,您可以使用以下步骤:使用curl函数或其他HTTP客户端库发送HTTP请求。......
  • php 安装 curl扩展
    PHP安装curl扩展发布于2022-07-2210:09:34阅读3120 大家好,又见面了,我是你们的朋友全栈君。昨天在写文章的时候,突然出现了一个很顽皮的bug。一直跳到404页......
  • EasyCVR视频融合平台国标级联可支持推送设备及本地经纬度信息
    EasyCVR视频融合平台部署轻快、功能灵活,可支持多协议、多类型设备接入,在视频能力上,可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、集群、智能分析以及平......