【发布时间】:2020-08-07 17:37:30
【问题描述】:
我有一个电子应用程序,它创建一个到节点 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 特定的请求范围客户端一样。
【问题讨论】: