在实际情况中 可能用不上SignalR 或者 websocket  这样全双工,太重的框架和技术,我们就可以用基于http协议本身的sse协议的实现我们想要的推送功能。

可以参考这一篇的 概念 https://zhuanlan.zhihu.com/p/21308648   

或者  阮一峰 大佬的 这一篇 https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html

核心代码

HomeController

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult ServerSentEvents()
        {
            Random random = new Random();
            string _event = "message";
            string data = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
            if (random.Next(0, 10) % 3 == 0)
            {
                data = "新消息";
                _event = "NewMsg";
            }

            Response.ContentType = "text/event-stream";
            return Content($"retry:{1000}\nevent:{_event}\nid:{DateTime.Now.Ticks}\ndata:{data}\n\n");
        }
    }

Index.cshtml

<h>主页</h>
<div id="result"></div>
<script type="text/javascript">
    if (typeof (EventSource) !== "undefined") {
        var source = new EventSource("../home/ServerSentEvents");
        source.onopen = function (event) {
            console.log(source.readyState);
            console.log(event);
        };
        source.onerror = function (event) {
            console.log(source.readyState);
            console.log(event);
            document.getElementById("result").innerHTML += "服务关闭 <br>";
        };
        source.onmessage = function (event) {
            console.log(source.readyState);
            console.log(event);
            document.getElementById("result").innerHTML += event.data + "<br>";
        };
        source.addEventListener("NewMsg", function (e) {
            console.log("唤醒新事件");
            console.log(e);
            document.getElementById("result").innerHTML += e.data + "<br>";
        });
    }
    else {
        document.getElementById("result").innerHTML = "抱歉,你的浏览器不支持 server-sent 事件...";
    }
</script>

实现结果如下:

 

以前一直不懂,现在懂了。也实现了。

 

 

 

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐