如何在节点js中实现从服务器A到服务器B的双向通信?

时间:2019-04-27 19:02:55

标签: node.js websocket socket.io

任何人都可以通过共享示例代码来提供帮助,

我将在下面解释我的任务。

服务器A是数据提供者(他们给了我websocket链接以流式传输数据)。 服务器B的意思是(我的AWS服务器每次从服务器A收到数据时都希望将数据保存到数据库中。)

需要一个可以连接服务器A的节点js代码,直到停止服务器B为止,它应该将数据保存到服务器B数据库中。

例如,假设我正在使用的那儿启动httpd服务器 服务httpd启动 服务httpd重新启动

类似地,我的应用程序应该可以工作。

先谢谢了。

1 个答案:

答案 0 :(得分:1)

在这种情况下,您最好的选择是使用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密钥,足以正确尝试afaik。

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

enter image description here

希望这会有所帮助!