代码改变世界

C# 实现HTML5服务器推送事件

  Evan.Pei  阅读(2262)  评论(0编辑  收藏  举报

为什么需要服务器推送事件:

    因为如果需要保持前台数据的实时更新例如,IM聊天,股票信息,

        1.可以在客户端不断地调用服务端的方法来获得新数据,但是这样会很消耗服务器资源,导致系统变慢!

       2 html5的新特性能在服务器直接发送最新数据到前台进行显示。

   先看后台的写法:WebForm8.aspx.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
protected void Page_Load(object sender, EventArgs e)
        {
             
            Response.ContentType = "text/event-stream";
            Response.Expires = -1;
            while (true)
            {
                Response.Write("date1235:" + DateTime.Now+"\n\n");
                Thread.Sleep(2000);
 
                //向客户端发送当前的缓冲数据
                //如果你将Flush写的循环外面,将会等循环执行完后一起显示到前台,当然这个是死循环
                Response.Flush();
            }
             
        }

在看html的写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm8.aspx.cs" Inherits="WebApplication1.WebForm8" %>
 
<!DOCTYPE html><!--注意此处是HTML5的标识,写出这样代表目前用的html版本是5-->
 
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div id="result">
     
    </div>
    </form>
</body>
</html>
 
<script type="text/javascript">
    //HTML5 服务器推送事件
    function ServerSendClient() {
        if (typeof (EventSource) !== "undefined") {
            var source = new EventSource("WebForm8.aspx.cs");
            source.onmessage = function (event) {
                document.getElementById("result").innerHTML += event.data + "<br />";
            };
        }
        else {
            document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
        }
    }
    ServerSendClient();
</script>

  前台截图:

(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示