使用 HTTP/2 时,我们应该更喜欢 SSE + REST 而不是 websocket 吗?

2024-01-08

当使用websocket时,我们需要一个专用的连接来进行双向通信。如果我们使用 http/2,我们就有由服务器维护的第二个连接。

在这种情况下,使用 websocket 似乎会带来不必要的开销,因为通过 SSE 和常规 http 请求,我们可以通过单个 HTTP/2 连接获得双向通信的优势。

你怎么认为?


在一个多路复用 HTTP/2 TCP 连接中使用 2 个流(一个流用于服务器到客户端通信 -服务器发送事件 http://www.w3.org/TR/eventsource/(SSE),以及一个用于客户端到服务器通信和正常 HTTP 通信的流)与使用 2 个 TCP 连接(一个用于正常 HTTP 通信,一个用于 WebSocket)的比较并不容易。

里程可能会根据应用程序而有所不同。

高架 ?嗯,连接数量肯定会增加一倍。 但是,WebSocket 可以压缩消息,而 SSE 则不能。

灵活性?如果连接是分开的,它们可以使用不同的加密。 HTTP/2 通常需要非常强的加密,这可能会限制性能。 另一方面,WebSocket 不需要 TLS。

明文 WebSocket 在移动网络中工作吗?根据我的经验,这取决于。防病毒软件、应用程序防火墙、移动运营商可能会限制 WebSocket 流量,或降低其可靠性,具体取决于您所在的国家/地区。

API 可用性 ? WebSocket 是一个更广泛部署和认可的标准;例如在Java中有一个官方API(javax.websocket),另一个即将到来(java.net.websocket).

我认为 SSE 对于双向 Web 通信来说是一种技术较差的解决方案,并且作为一项技术,它并没有变得非常流行(没有标准 API,没有书籍等 - 与 WebSocket 相比)。 如果它从 HTML5 中删除,我不会感到惊讶,而且我也不会错过它,尽管最早之一 https://github.com/jetty-project/jetty-eventsource-servlet to 实施它 https://github.com/eclipse/jetty.project/blob/master/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/EventSourceServlet.java在码头。

根据您的兴趣,您必须针对您的特定案例进行基准测试或评估技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HTTP/2 时,我们应该更喜欢 SSE + REST 而不是 websocket 吗? 的相关文章

  • Python 的 SignalR 替代方案

    Python 世界中 SignalR 的替代方案是什么 准确地说 我在Windows 8上使用tornado和python 2 7 6 我发现sockjs龙卷风 https github com MrJoes sockjs tornado
  • NodeJS Websocket如何在服务器重新启动时重新连接

    在 Node js 中我使用网络套接字 ws https github com websockets ws用于 WebSocket 连接 以下是客户端的代码 假设我们正在连接的服务器套接字宕机了一分钟 close 事件将会触发 但是每当服务
  • django 中的实时通知/聊天

    我现在正在用 django 制作一个网站 我想实现一个实时通知功能 就像 facebook 或 SE 上的那样 我做了一些研究 似乎虽然有两种选择 ajax 长轮询和 websockets 但后者是最佳选择 然而 正如你所知 websock
  • 通过nodejs服务器+socket.io从mp3文件同步流式传输音乐

    我的服务器上有一个 mp3 文件 我希望所有访问该网址的客户都能同步收听该音乐 That is 假设该文件播放 6 分钟 我在上午 10 00 开始播放这首歌 上午 10 03 发出的请求应从歌曲的第 3 分钟开始收听 我所有的客户都应该同
  • GO Websocket 向所有客户端发送消息

    这段代码一切正常 为了更好的阅读而缩短了它 When Client1向服务器发送请求 服务器立即响应他 但是 其他客户端看不到响应消息 所以我想更进一步 当客户端向服务器发送请求时 服务器会响应所有客户端 以便所有客户端都可以看到该消息 我
  • Heroku 上带有 Django Channels 的 Websocket

    我正在尝试将我的应用程序部署到heroku 该应用程序有一个简单的聊天系统 使用 Websockets 和 django 通道 当我使用 python manage py runserver 测试我的应用程序时 应用程序的行为正如预期的那样
  • 我应该使用全局变量在整个服务器上共享 socket.io 实例吗

    以下是我的 node js 应用程序中的 server js 文件 我希望我的 socket io 实例能够被服务器上的其他文件访问 以便从我的 API 发出事件 listingRoutesApi userRoutesApi etc ref
  • Service Worker 是否持续向服务器请求、响应?

    我正在使用服务器发送事件来显示通知 我创建了一个服务工作线程 并在运行项目后使用 EventSource 与服务器连接 在我的例子中 我使用了 servlet 一切正常 但事件内的内容会被多次执行 我想知道为什么 我的另一个问题是 一旦我关
  • 如何用Java处理来自客户端的Websocket消息?

    我正在使用 Websocket 用 Ja va 开发客户端 服务器应用程序 目前 所有客户端消息均使用 switch case 进行处理 如下所示 OnMessage public String onMessage String unscr
  • java-websocket的WebSocketServer使用什么草案?

    我无法从WebSocketServer java源码 https github com TooTallNate Java WebSocket blob master src main java org java websocket serv
  • 在cypress中捕获websocket请求

    我试图捕获测试期间发生的所有请求 我的应用程序使用 WebSocket 并且使用拦截命令我无法捕获 wss 请求 有什么办法可以做到这一点吗 我认为拦截命令不能直接捕获网络套接字 一种方法是观察 ws 通信的结果 如下所示使用 Cypres
  • HTTP/2 世界中的 WebSocket 替代方案是什么?

    新的 HTTP 2 协议具有一些有前途的功能 他们中有一些 多路复用 单个 TCP 连接可用于发出多个 HTTP 2 请求并接收多个响应 到单个源 HTTP 2 服务器推送 将服务器响应发送到客户端而不接收请求 即由服务器发起 双向连接 H
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • 客户端如何获取session id? (网络套接字)

    有什么办法可以做到这一点吗 客户端 function connectWebSocket var socket new SockJS socket stompClient Stomp over socket stompClient conne
  • iOS 中通过 USB 进行反向端口转发

    我在桌面上有一个 Web 套接字服务器 在 iPhone 设备上有一个客户端 我想使用 USB 而不是任何网络与他们通信 我已经使用 adb reverse 在 android 上实现了它 但无法找到适用于 iOS 的任何解决方案 我尝试使
  • 如何等待 WebSocket 就绪状态更改

    我正在尝试实现一个可以回退到轮询的 WebSocket 如果WebSocket连接成功 readyState变为1 但如果失败 readyState是 3 我应该开始轮询 我尝试过这样的事情 var socket new WebSocket
  • 如何终止 Websocket 连接?

    如何终止 Websocket 连接 我不是在谈论关闭两端的连接 而是在 中间 中断它 我需要测试重新连接时必须发生的一些应用程序逻辑 通过 SocketIO 处理 不 拔掉网络电缆不算数 因为我无法在单元测试中真正实现自动化 此外 我希望只
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • WebSocket 无法与 DNS 配合使用

    我有一个网络应用程序 我正在使用 websockets 我在使用 ws myDomain com 作为 websocket 服务器的地址时遇到问题 这个问题很奇怪 因为我使用许多 PC 测试了连接 似乎这适用于大约 1 5 的 PC 当我将

随机推荐