使用服务器发送事件而不是WebSockets进行双向客户端-服务器通信?

问题描述 投票:1回答:2

如果客户端使用HTTP POST发送消息并使用SSE异步接收消息,则可以使用服务器发送事件(SSE)在客户端和服务器之间实现双向通信。

此处已经提到,由于HTTP请求包含标头,并且使用Websocket在这种情况下更好,因此具有AJAX的SSE具有更高的往返延迟和更高的客户端->服务器带宽,但是对于SSE而言,它们可以用于进行一致的数据压缩,因为websockets的permessage-deflate 支持选择性压缩,这意味着某些消息可能被压缩而另一些消息没有被压缩

websocket real-time server-sent-events server-push
2个回答
0
投票

是的,有可能。

您可以打开1个以上的并行HTTP连接,因此没有什么阻止您。


0
投票

在这种情况下,最好的选择是使用WebSockets服务器,因为从头开始构建WS实现不仅耗时,而且已经解决了这一事实,因此使其无用。 正如标记了Socket.io一样,这是入门的好选择。 这是一个开放源代码的工具,易于使用,可从文档中获取。

但是,由于它是开源的,因此当您要在生产级应用程序中流传输数据时,它不会提供某些至关重要的功能。 存在一些问题,例如可伸缩性,互操作性(针对在非WebSockets协议上运行的端点),容错性,确保可靠的消息排序等。

实时消息传递基础结构以及上面提到的这些关键生产级别功能是作为称为“数据流网络”的服务提供的。 有多家公司提供此服务,例如Ably,PubNub等。

我与Ably进行了广泛的合作,因此很乐意在使用Ably的Node.js中共享一个示例:

var Ably = require('ably');
var realtime = new Ably.Realtime('YOUR-API-KEY');
var channel = realtime.channels.get('data-stream-a');
  //subscribe on devices or database
  channel.subscribe(function(message) {
  console.log("Received: "  message.data);
});

//publish from Server A
channel.publish("example", "message data");

您可以创建一个免费帐户,以获得一个每月包含300万条免费消息的API密钥,足以正确地试用它。

还有一个Reactor函数的概念,它本质上是在AWS,Azure,Gcloud等上实时调用无服务器函数。您也可以将数据库放在一侧,并在数据到达时对其进行日志记录。 将此图片粘贴在Ably网站上以获取上下文:

在此处输入图片说明

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.