在node.js app和lua app之间共享数据

时间:2014-09-10 07:34:07

标签: node.js lua node-webkit

我有两个应用程序,一个在node-webkit上运行的node.js应用程序,以及一个lua应用程序。我需要在常规间隔上传递两个应用程序之间的数据,比如说每5到15秒。

node.js应用程序是创建数据的应用程序,而lua应用程序是使用数据的应用程序。数据仅向一个方向发展。

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

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

我的背景是网络开发,所以在应用程序之间共享数据时我完全迷失了。我也是lua的新手。谢谢你的回答。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

如果您使用了数据库,则会读取新记录,使用它们,完成后,将其从数据库中删除。这种方法允许您出于升级等原因独立关闭消费者和生产者应用程序。

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