如何使用 websockets 在 nodejs 中创建多个 XMPP 客户端
How to create multiple XMPP clients in nodejs using websockets
我有一个 electron 应用程序可以创建到节点 js 服务器的 websocket 连接。它向该服务器发送一个 JSON 请求,告诉它创建一个 xmpp 客户端。
let message = {
action: "setupXmpp",
data: {
username,
password,
},
};
socket.send(JSON.stringify(message));
在该服务器中,我有一个开关可以读取消息操作并创建 xmpp 客户端。 xmppActions 中的代码是取自 xmpp 的 repo
的标准样板
const xmppActions = require("./Webapp/xmppActions");
case "setupXmpp":
console.log(`Received setupXmpp request`);
var { username, password } = message.data;
const xmpp = xmppActions.setUpXMPPconn(username, password);
xmpp.on("online", async (address) => {
console.log("▶", "online as", address.toString());
ws.send("Register xmpp Success!");
});
break;
一切正常我可以创建一个 xmpp 客户端并发送消息,一切正常。
我的问题是当我有两个客户端打开并且他们都注册(使用不同的用户名和密码)时,无论谁是最后一个请求总是覆盖以前的注册。我已经完成了 wireshark 跟踪,并且按照我的预期创建了两个 websocket 连接,但是在发送消息时,它们都使用了最新的寄存器。我认为这是因为 XMPP 客户端是一个常量,无论谁是最后一个,它都会将这些客户端用于所有未来的请求。
如何让每个 websocket 连接都有自己的 XMPP 客户端,几乎就像每个 websocket 特定的请求范围的客户端。
我在 websocket 连接之外有一个常量,将其更改为在内部有一个 var,这样每个连接都有自己的客户端。
我有一个 electron 应用程序可以创建到节点 js 服务器的 websocket 连接。它向该服务器发送一个 JSON 请求,告诉它创建一个 xmpp 客户端。
let message = {
action: "setupXmpp",
data: {
username,
password,
},
};
socket.send(JSON.stringify(message));
在该服务器中,我有一个开关可以读取消息操作并创建 xmpp 客户端。 xmppActions 中的代码是取自 xmpp 的 repo
的标准样板const xmppActions = require("./Webapp/xmppActions");
case "setupXmpp":
console.log(`Received setupXmpp request`);
var { username, password } = message.data;
const xmpp = xmppActions.setUpXMPPconn(username, password);
xmpp.on("online", async (address) => {
console.log("▶", "online as", address.toString());
ws.send("Register xmpp Success!");
});
break;
一切正常我可以创建一个 xmpp 客户端并发送消息,一切正常。
我的问题是当我有两个客户端打开并且他们都注册(使用不同的用户名和密码)时,无论谁是最后一个请求总是覆盖以前的注册。我已经完成了 wireshark 跟踪,并且按照我的预期创建了两个 websocket 连接,但是在发送消息时,它们都使用了最新的寄存器。我认为这是因为 XMPP 客户端是一个常量,无论谁是最后一个,它都会将这些客户端用于所有未来的请求。
如何让每个 websocket 连接都有自己的 XMPP 客户端,几乎就像每个 websocket 特定的请求范围的客户端。
我在 websocket 连接之外有一个常量,将其更改为在内部有一个 var,这样每个连接都有自己的客户端。