当前位置: 首页 > 知识库问答 >
问题:

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

凌声
2023-03-14

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

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

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

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

在fiddler中,我注意到一个永远不会完成的请求——挂起的get——就像你在长轮询传输中所期望的那样。然而,与长轮询相比,请求永远不会完成,即使在实际发送数据时也不会。Wireshark透露,这个请求确实用于建立从服务器到客户端的单向通道:它的响应是分块的,对于每条html" target="_blank">消息,服务器都会发送一个块。

但当然,用http的说法,这仍然是客户机向服务器发出的请求。

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

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

共有2个答案

张高澹
2023-03-14

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

秦鸿羽
2023-03-14

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

 类似资料:
  • 概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“

  • 概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“

  • 我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef

  • 如果我正确理解了服务器发送事件的原则,那么每次客户端注册到EventSource时,它实际上会打开一个到管理事件的资源的新HTTP连接。与其他HTTP请求相反,连接保持活动状态,因此专用于此客户端的服务器进程/线程将一直运行,直到客户端断开连接。 如果我们有1000个客户端使用SSE连接到一个应用程序,该怎么办?我们是否会有1000个进程/线程(做同样的事情)并发运行以处理SSE?我想我错了,但如

  • 我是 SSE(服务器发送事件)的新手。我找到了一种在Spring启动中使用SSE发送响应的方法。我能够每 20 秒发送一次响应。我用下面的代码做同样的事情。 但问题是,这个方法每20秒就被调用一次。 但是,我的要求是每20秒向客户端发送一次空响应,并在新用户添加到数据库时发送响应。 如何实现我的目标?或者我在概念上完全错了。

  • 问题内容: 我使用express.js设置了REST服务器。现在,我想向该服务器添加sse。实现此 sse程序包后,出现错误。我知道我收到此错误,何时尝试使用两次,但我没有。 我有可能无法在sse函数中使用express方法吗?例如: 此外,我找到了解决方案和这个。是否可以在不使用其他软件包的情况下通过该函数或其他方式使用sse ? 问题答案: 如果没有其他软件包,您绝对可以实现。 我写了一篇有关