Sever-Sent Events使用(C# + Js)

作用:避免客户端使用轮询的方式不停的请求服务端数据
特别注意:服务端传输的数据,必须包含【data:】这五个字符,否则在客户端中是收不到message值的

使用如下

服务端代码:

Response.ContentType = "text/event-stream";
Response.CacheControl = "no-cache";
for (int i = 0; i < 100; i++)
{
    Response.Write("id: " + i + "\n");
    // Response.Write("event: listen\n"); // 不赋值的话默认是message
    Response.Write("data: " + System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\n");
    Response.Flush();
    System.Threading.Thread.Sleep(2000);
}

客户端代码:

<div id="content"></div>

<script>
    var source = new EventSource(url);
    // 默认事件 message 可以使用 onmessage 回调
    source.onmessage = function (event) {
        var data = event.data;
        document.getElementById("content").innerHTML += data + "<br/>";
    }
    //-------------------------------------------------------------------
    // 另一种写法(如果event字段没有赋值,则默认事件就是message)
    source.addEventListener('message', function (event) {
        var data = event.data;
        document.getElementById("content").innerHTML += data + "<br/>";
    }, false);
    // 如果event字段赋值为‘listen’,则应该监听事件‘listen’)
    source.addEventListener('listen', function (event) {
        var data = event.data;
        document.getElementById("content").innerHTML += data + "<br/>";
    }, false);
    //-------------------------------------------------------------------
</script>

参考:https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events

posted @ 2022-07-29 11:29  xuxuzhaozhao  阅读(83)  评论(0编辑  收藏  举报