【问题标题】:Sharing data between node.js app and lua app在 node.js 应用程序和 lua 应用程序之间共享数据
【发布时间】:2014-11-03 18:24:37
【问题描述】:

我有两个应用程序,一个在 node-webkit 上运行的 node.js 应用程序和一个 lua 应用程序。我需要定期在两个应用程序之间传递数据,比如每 5 到 15 秒一次。

node.js 应用程序是创建数据的应用程序,而 lua 应用程序是消费数据的应用程序。数据只流向一个方向。

我应该如何进行数据传输。我更喜欢 json/xml 作为数据,但实际上它也可以是任何其他格式。一次移动的数据并不大。一次只有十个参数。

我最初的想法是让节点应用程序充当服务器并通过rest api提供数据,而lua应用程序只是使用LuaSocket等读取页面。但是,如果两个应用程序都驻留在同一台机器上,有没有更好的方法来进行传输?目前 lua 应用程序正在 Windows 中运行,但这可能会改变。

我的背景是 Web 开发,所以在应用程序之间共享数据时我完全迷失了方向。我也是lua的新手。感谢您的任何回答。

【问题讨论】:

    标签: node.js lua node-webkit


    【解决方案1】:

    有很多方法可以完成这样的任务。我将描述其中两个。

    我最喜欢的第一种方法是使用远程队列,例如 Apache Kafka、Redis、RabbitMQ,甚至 Zookeeper 来存储小数据,或者存储在数据库中。所有这些远程存储系统都有非常好的 Node.js 模块,它们都可以很好地处理 JSON 和任何其他数据类型。

    除非这只是一个测试应用程序,否则最好在您的应用程序中构建这样的容错能力。在您的情况下,想象一下如果消费者 Lua 应用程序出现故障,或者相反,Node.js 生产者应用程序出现故障。您不希望一个应用程序的故障影响另一个应用程序。在生产环境中,最好像这样隔离应用程序和任务。这种方法的另一个优点是,有一天您可能决定用 Node.js、Scala 等重写您的消费者,或者使用不同的语言拥有多个消费者。这不需要您的服务器停止或更改。它甚至不必知道消费者的任何变化。

    因此,您的生产服务器始终独立地将数据推送到远程数据存储/队列,而消费者服务器按照自己的节奏读取然后从该远程存储中删除数据。

    如果您使用数据库,您将读取新记录、使用它们,然后在完成后将它们从数据库中删除。这种方法允许您出于任何原因(例如升级)独立关闭消费者和生产者应用。

    另一种方法是通过 TCP 建立从生产者服务器到消费者服务器的直接网络连接。生产者服务器将是将数据推送到消费者服务器的客户端。如果应用程序位于不同的物理机器上,这可以通过net 内置模块来完成。但正如您所看到的,这是不太可靠的解决方案,因为如果消费者下降,产品将无法再推送新数据,在这种情况下,您应该考虑如何处理它:丢弃或存储在某个地方。如果存储在某个地方,您最终会重新实现上述第一种方法。

    【讨论】:

      猜你喜欢
      • 2011-03-13
      • 1970-01-01
      • 2018-08-05
      • 2019-03-29
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多