Asp.net .Net服务器使用HttpHandler发送的事件无效
我一直在尝试将事件驱动推送到客户端浏览器。我使用ReactiveX从事件生成异步任务,但我甚至无法让我的HttpHandler输出它们的响应 我尝试了一个简单的HttpHandler:Asp.net .Net服务器使用HttpHandler发送的事件无效,asp.net,html,httphandler,server-sent-events,Asp.net,Html,Httphandler,Server Sent Events,我一直在尝试将事件驱动推送到客户端浏览器。我使用ReactiveX从事件生成异步任务,但我甚至无法让我的HttpHandler输出它们的响应 我尝试了一个简单的HttpHandler: public class Handler2 : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/event-stream";
public class Handler2 : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/event-stream";
HttpResponse response = context.Response;
DateTime startdate = DateTime.Now;
while (startdate.AddMinutes(10) > DateTime.Now)
{
JavaScriptSerializer js = new JavaScriptSerializer();
string responseText = DateTime.Now.TimeOfDay.ToString();
response.Write(string.Format("data: {0}",js.Serialize(responseText)));
response.Flush();
System.Threading.Thread.Sleep(1000);
}
response.Close();
}
public bool IsReusable
{
get
{
return false;
}
}
}
使用以下客户端代码:
函数初始化(){
我设置错了吗?
就我在其他示例中所看到的情况而言,此代码应按原样工作。请任何人帮助我。我只需要一个简单的SSE控件,可以从服务器端事件触发
提前感谢我之前已经给出了这个答案,但让我详细说明一下: 查看Google Chrome开发者工具中的“网络”选项卡,可以从您的 根本没有生成SSE-点击网络下的“其他”按钮,您通常可以在这里跟踪SSE数据流 在我的SSE中,我使用了一个简单的HTTPListener,它工作得很好,没有您提到的延迟,并且在使用它时,总是在浏览器之间正确显示
嗨,你还没弄好吗?嗨,查尔斯,我找到了适合我需要的SignalR。我的用户数量有限,因为这将是一个saas网站,所以这是最好的解决方案。好吧,很酷。SignalR很酷,而且总是能工作,但我想如果你只是从服务器到客户端,我认为简单的SSE是一个很好的选择解决方案
if (window.EventSource == undefined) {
document.getElementById('targetDiv').innerHTML = "Your browser doesn't support Server Side Events.";
return;
}
var source = new EventSource('Handler2.ashx');
source.onopen = function (event) {
document.getElementById('targetDiv').innerHTML += 'Connection Opened.<br>';
};
source.onerror = function (event) {
if (event.eventPhase == EventSource.CLOSED) {
document.getElementById('targetDiv').innerHTML += 'Connection Closed.<br>';
}
};
source.onmessage = function (event) {
document.getElementById('targetDiv').innerHTML += event.data + '<br>';
};
}
"ws://localhost:50022/ed4b66c7eb394a8789b5f6a631f4ff09/arterySignalR/connect?.."
res.AddHeader("Content-Type", "text/event-stream")
res.AddHeader("Cache-Control", "no-cache")
res.AddHeader("Access-Control-Allow-Origin", "*")
res.KeepAlive = True