node.js - 在 node.js 应用程序和 lua 应用程序之间共享数据

标签 node.js lua node-webkit

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

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

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

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

我的背景是网络开发,所以在应用程序之间共享数据时我完全不知所措。我也是lua的新手。感谢您的回答。

最佳答案

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

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

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

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

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

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

关于node.js - 在 node.js 应用程序和 lua 应用程序之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25759739/

相关文章:

javascript - Cheerio 只给了我 img 的 src 属性值的一部分?

javascript - 桌面应用程序上的共享设置位置

javascript - Node-webkit iframe 访问父 nw 函数

node.js - NW.js/Node.js 使用 node-mssql 时抛出 "SSL routines:ssl_choose_client_version:unsupported protocol"错误/乏味

node.js - 如何在 Travis 上使用 sudo 运行 mocha

node.js - 如何测试输入是否不是/dev/random?

javascript - 创建一个接受回调并返回 Promise 的 api

for-loop - Lua 中的pairs() 和ipairs() 有什么区别?

sorting - 当我尝试自己对表格进行排序时,我不断对数字和零进行比较

nginx - Nginx Lua在proxy_pass之后修改HTML响应