1

试图处理这个问题,但不明白为什么会出现这样的错误。

我在 cosole Google Chrome 中收到此错误:EventSource 的响应具有不是“text/event-stream”的 MIME 类型(“text/html”)。中止连接。

public class Item {
    public int Index { get; set; }
    public int Value { get; set; }
}

public class DataRetModel {        
    public List<Item> Items { get; set; }
    public Item Item { get; set; }        
}

ServerEvents.NotifySession(user.SessionId, new DataRetModel{...init...});

感谢帮助!

…………

在使用 Fidler 分析请求后(感谢@mythz 的想法),我发现以下内容:如果您在一个浏览器中注销,则有 2 个客户端浏览器运行服务器事件的处理程序,那么另一个浏览器将获得 2 个事件,一个正常,另一个“EventSource 的响应具有 MIME 类型”(http 状态 = 401)。

现在问题出现了,如果我向他们发送 SessionId,为什么两个客户端都会收到所有事件?

您可以让每个用户都收到他们的事件吗?

var eventSource = new EventSource('/event-stream');

客户端处理程序:

$(eventSource).handleServerEvents({
    handlers: {
       DataRetModel: function (data) {
           console.log(data);
       }
    }           
 });
4

1 回答 1

2

现在问题出现了,如果我向他们发送 SessionId,为什么两个客户端都会收到所有事件?

通过 SessionId 发送通知会将其发送给具有相同 Session Id 的所有客户端,如果您使用的是浏览器,则意味着所有浏览器选项卡。

如果您只想将其发送到单个 SSE 订阅(即单个浏览器选项卡),则需要将其发送到客户端 SSE SubscriptionId,您需要将其传递到您的服务中,以便它知道将通知发送到哪里。onConnectSSE 客户端建立连接后,您可以从处理程序中获取 subscriptionId 。

于 2017-05-16T10:38:22.530 回答