经过数小时的谷歌搜索,我发现只有一个关于使用 asp.net(不是 MVC)的事件源的示例。首先我必须说我想学习它,我的最终目标是创建一个友好的扑克网站。SignalR 非常适合我的目的,但我不想使用它,因为我听说:
SignalR 性能不佳
不是吗?(我希望不是)。我的问题是当服务器向客户端发送响应时,它发送的不是当前文本:
$("#btnListen").click(function ()
{
var source = new EventSource('SSEHandler.ashx');
source.addEventListener("open", function (event)
{
$('#headerDiv').append('Latest 5 values');
}, false);
source.addEventListener("error", function (event)
{
if (event.eventPhase == EventSource.CLOSED)
{
$('#footerDiv').append('Connection Closed!');
}
}, false);
source.addEventListener("message", function (event)
{
console.log(event.data);
}, false);
});
这是 SSEHandler:
public class SSEHandler : IHttpHandler
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
HttpResponse Response;
Response = context.Response;
Response.ContentType = "text/event-stream";
Response.Write(string.Format("data: {0}\n\n", "first"));
Response.Flush(); //client has no response received yet
Response.Write(string.Format("data: {0}\n\n", "second"));
Response.Flush(); //now client get "first".
Response.Close();
}
}
执行此 cods 客户端控制台后,只有“第一”。如果我将其添加到 SSEHandler 的末尾:
Response.Write(string.Format("data: {0}\n\n", "third"));
Response.Flush();
在客户端控制台中,我们有“第一”、“第二”。感谢您阅读我的长文。