Web实时通信技术-服务器发送事件(Server-Sent Events)
1.概念原理
Server-Sent 事件指的是网页自动获取来自服务器的更新。以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过服务器发送事件,更新能够自动到达。
特点:单向的,页面发送请求后,后台保持住请求,有新消息则返回信息到前端。当链接断开或失败时,浏览器端会自动重连。
应用场景:适合浏览器端只做数据接收,不做数据提交的信息展示端。比如监控看板,视频播放器等。
2.具体实现
2.1浏览器端依靠 EventSource 对象发起请求。
栗子:
<script type="text/javascript"> const loadData = () => { // 初始化一个EventSource对象 var source = new EventSource("@Url.Action("GetData")"); // 接收信息回调函数 source.onmessage = function (event) { document.getElementById("result").innerHTML += event.data + "<br>"; }; // 链接打开时回调函数 source.onopen = function (event) { console.log("ready ..."); } // 链接断开或异常回到函数 source.onerror = function (event) { console.log("error ..."); } } loadData(); </script>
2.2 服务器端规则
- 把报头 "Content-Type" 设置为 "text/event-stream"
- 规定不对页面进行缓存
- 输出发送日期(始终以 "data: " 开头, "\n\n"结尾)
- 向网页刷新输出数据
栗子:public void GetData()
{
var response = HttpContext.Response;
response.ContentType = "text/event-stream; charset=utf-8"; // 设置响应类型
Response.Expires = -1;//设置不缓存
int i = 0;
while (i < 10 && response.IsClientConnected)
{
i++;
Response.Write("data:" + DateTime.Now + "\n\n"); // 以data:开头 ,\n\n结尾
Response.Flush(); // 刷新输出数据
System.Threading.Thread.Sleep(1000);
}
}
3.运行栗子结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~