我已经在这里和那里查阅了相关的内容,试图弄清楚服务器发送事件在传输层面上是什么。但我依然不确定。
两个来源都声称它们只是“http”。然而,我可以从至少两个方面解释这样的说法。
当我第一次阅读这些文章时,我认为这意味着服务器向客户端在相同的端口上发起请求,之前客户端向服务器发出了其他常规的http请求。这对于普通家用路由器的地址转换应该能够正常工作,但我想知道在公司环境中防火墙的影响。
然而,后来我尝试使用SignalR与Silverlight客户端,我的简单示例声称要使用服务器发送事件作为传输方式。这是有道理的,因为SignalR文档说WebSockets不支持Silverlight,服务器发送事件是下一个最佳选择。
在Fiddler中,我注意到有一个请求一直没有结束——就像你期望的长轮询传输一样。然而,与长轮询不同的是,即使数据实际上被发送,这个请求也永远不会结束。Wireshark揭示了这个请求确实用于从服务器到客户端建立单向通道:它的响应是分块的,对于每个消息,服务器都会发送一个块。但当然,在HTTP术语中,这仍然是一个从客户端到服务器的请求。
由于我找不到任何提到这个相当重要的信息的来源,我想问问是否有人能够验证这种方法确实称为服务器发送事件,并且我的SignalR客户端没有欺骗我。
(PS:在写完问题之后,我注意到服务器发送事件标签已经告诉我该技术使用一个持久的从客户端到服务器的请求。那几乎就是我所寻求的全部确认。无论如何,我还是提交了这个问题,以防有人能够找到这些信息。)