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

3

我已经在这里那里查阅了相关的内容,试图弄清楚服务器发送事件在传输层面上是什么。但我依然不确定。

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

当我第一次阅读这些文章时,我认为这意味着服务器客户端在相同的端口上发起请求,之前客户端服务器发出了其他常规的http请求。这对于普通家用路由器的地址转换应该能够正常工作,但我想知道在公司环境中防火墙的影响。

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

在Fiddler中,我注意到有一个请求一直没有结束——就像你期望的长轮询传输一样。然而,与长轮询不同的是,即使数据实际上被发送,这个请求也永远不会结束。Wireshark揭示了这个请求确实用于从服务器到客户端建立单向通道:它的响应是分块的,对于每个消息,服务器都会发送一个块。
但当然,在HTTP术语中,这仍然是一个从客户端到服务器的请求。
由于我找不到任何提到这个相当重要的信息的来源,我想问问是否有人能够验证这种方法确实称为服务器发送事件,并且我的SignalR客户端没有欺骗我。
(PS:在写完问题之后,我注意到服务器发送事件标签已经告诉我该技术使用一个持久的从客户端到服务器的请求。那几乎就是我所寻求的全部确认。无论如何,我还是提交了这个问题,以防有人能够找到这些信息。)
2个回答

1
在编写问题后,我注意到服务器发送事件标签已经告诉我该技术使用来自客户端到服务器的持久请求。这几乎是我正在寻找的全部确认。无论如何,我仍会提交此问题,以防它可能帮助某人找到这些信息。

0
想象服务器发送事件就像这样,当服务器接收到SSE请求时,数据被作为写流从服务器发送(因此对于SSE,我们使用text/stream格式)。因此,每当有新数据时,它会自动推送到该流中。客户端接收它。这是一个单向流连接。如果您需要更多信息,请添加评论。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接