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