Server sent events 服务器发送事件是如何实现的?

Server sent events 服务器发送事件是如何实现的?,server-sent-events,Server Sent Events,我已经查看并试图找出传输级别上服务器发送的事件是什么。我还是不确定 这两个来源都声称它们“只是http”。然而,我至少可以用两种方式来解释这种说法 当我第一次阅读这些文章时,我假设这意味着服务器在同一端口上向客户机发起请求,之前已经从客户机向服务器发出了一些其他常规http请求。这应该适用于普通家庭路由器的地址转换,但我想知道防火墙在公司环境中的含义 然而,后来,我尝试在Silverlight客户机上使用Signal,在我的简单示例中,它声称使用服务器发送的事件作为传输。这是有道理的,因为Sig

我已经查看并试图找出传输级别上服务器发送的事件是什么。我还是不确定

这两个来源都声称它们“只是http”。然而,我至少可以用两种方式来解释这种说法

当我第一次阅读这些文章时,我假设这意味着服务器在同一端口上向客户机发起请求,之前已经从客户机向服务器发出了一些其他常规http请求。这应该适用于普通家庭路由器的地址转换,但我想知道防火墙在公司环境中的含义

然而,后来,我尝试在Silverlight客户机上使用Signal,在我的简单示例中,它声称使用服务器发送的事件作为传输。这是有道理的,因为SignalR文档说Silverlight中不支持WebSocket,服务器发送事件是下一个最佳选择

在fiddler中,我注意到一个从未完成的请求——一个挂起的get——就像你期待的长轮询传输一样。然而,与长轮询相反,请求永远不会完成,即使在实际发送数据时也是如此。Wireshark透露,该请求实际上用于建立从服务器到客户端的单向通道:它的响应被分块,服务器为每条消息发送一个分块

但当然,用http的说法,这仍然是从客户端到服务器的请求

由于我找不到任何提到这一相当重要信息的来源,我想问是否有人可以验证这种方法确实被称为服务器发送事件,并且我的SignalR客户端没有对我撒谎


(PS:在写了这个问题之后,我注意到server sent events标签已经告诉我,该技术使用了从客户端到服务器的持久请求。这几乎就是我所寻求的全部确认。无论如何,我都在提交这个问题,以防它可能帮助某人找到这些信息。)

想想服务器发送的事件,例如,当服务器接收到SSE请求时,数据将作为写入流从服务器发送(因此对于SSE,我们使用文本/流格式)。因此,只要有新数据,它就会自动推送到该流。客户机收到了它。它是单向流连接。如果您需要更多信息,请添加注释。

在写完问题后,我注意到服务器发送的事件标签已经告诉我该技术使用从客户端到服务器的持久请求。这几乎就是我所寻求的全部确认。无论如何,我都在提交这个问题,以防它能帮助别人找到这些信息