javascript - 在 Node.js 和 Delphi 应用程序之间交换消息

标签 javascript node.js delphi websocket socket.io

我有 2 个应用程序,1 个大型 Delphi Windows 应用程序和 1 个小型 Node.js 应用程序。我希望 Node.js 应用程序根据从实时服务收到的输入向 Delphi 应用程序发送不同的消息。

我现在的问题是,如何开始在这两个应用程序之间交换消息 - 如何将消息从 Node.js 发送到 Delphi 应用程序?

我自己一直在做一些研究,但没有得到任何明确的答案,尽管如果我希望实时发送这些消息,WebSockets 似乎是唯一的解决方案?

我尝试使用 socket.io 为我的 Node.js 应用程序编写一些代码,让您了解我想要什么:

const Realtime = require("ably").Realtime;
const server = require("http").createServer(handler);
const io = require("socket.io")(server);

server.listen(80);

io.on("connection", (socket) => {
    console.log("Connected!");
    socket.on('event-1', function (data) {
        // alert Delphi app about event
    });
});

const client = new Realtime('XXXXX');

client.connection.on("connected", () => {
    console.log("Realtime connected!");
});

function handler(req, res) {
    console.log("Got em");
}

所以想法是 Delphi 应用程序在启动时启动 Node.js 应用程序,并且接收到的所有实时消息都从 Node.js 应用程序传递到 Delphi 应用程序。

我一直在寻找 WebSockets 和 Delphi 的库,但只找到了这个 https://www.esegece.com/websockets/download , 但我不知道这是否可行。

希望有人能给我一些建议。

最佳答案

how to send messages from Node.js to the Delphi app?

您可以在 Delphi 应用程序中运行嵌入式 HTTP 服务器(例如 Indy TIdHTTPServer),使其能够接收来自 JS 应用程序的 HTTP 请求。

或者 - 如果您更有冒险精神 - 您也可以设计自己的协议(protocol)并在 Delphi 应用程序中运行嵌入式 TCP 服务器 (Indy TIdTCPServer)。

除了 HTTP 之外,还有其他用于消息交换的协议(protocol)和库。一个可用于 Delphi 和 nodejs 的是 0MQ (ZeroMQ):

https://github.com/zeromq/zeromq.js/

关于javascript - 在 Node.js 和 Delphi 应用程序之间交换消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52094057/

相关文章:

delphi - 如何在窗体上绘制透明文字?

javascript - JS moment 检查现在是否是一分钟后不起作用

javascript - 既然有 <noscript> 部分,为什么还要使用 Google Conversion Script 的 &lt;script&gt; 部分?

node.js - 在初始连接时将 JWT 传递给 Authorization header 中的 Node.js WebSocket

vb.net - 在 Delphi 中使用 COM 类的方法

delphi - 避免在Windows Vista对话框中包装复选框标题

javascript - JS 中的粘性菜单

javascript - jquery .add() 不添加 html 元素

javascript - 错误:Uncaught TypeError: Cannot read property 'groupBy' of undefined

node.js - 未处理的拒绝 SequelizeDatabaseError : Unknown column 'NaN' in 'field list'