节点xmpp消息未发送到正确的目标

时间:2015-08-21 08:15:58

标签: javascript node.js node-xmpp

我正在使用node-xmpp服务器作为2个客户端的聊天服务器:Psi和Spark.I为每个客户端注册一个帐户。我想从Psi帐户向S​​park帐户发送一条消息。每次我发送一个来自同一帐户的帐户收到消息的消息。我想将朋友添加到我的列表中(我不知道为什么不工作......可能没有实现)并正确发送消息。我正在使用节点xmpp服务器/examples/server-and-client.js.感谢建议。

1 个答案:

答案 0 :(得分:1)

使用正确的客户端连接发送消息,即

1)。在验证时将客户端的所有连接存储在一个数组中 2)。当消息到来时,找到与" to"相关联的正确客户端。消息节中的字段 var receiverCleint = getClient(msgStanza.attrs.to)
3)。返回正确的客户端并通过该客户端发送消息 receiverCleint.send(msgStanza)

我也正在研究相同的演示,我唯一担心的是当更多用户添加时,这将是一个问题,因为它必须通过所有客户端迭代每条消息。

任何更好的方法都会受到赞赏。

<强>代码:

var clients = new Array();

c2sRouter.on("connection", function(client){

client.on("register", function(opts, cb){
    console.log("client server", "register");
})

client.on("authenticate", function(opts, cb){
    console.log("client server", "authenticate");

    if(opts.password === "tushar" || opts.password === "tushar1"){
        clients.push(client);
        cb(null, opts);
    }else{
        cb(false, opts);
    }
})

client.on("online", function(){
    console.log("client server", "online");

})

client.on("stanza", function(stanza){
    console.log("client server", stanza.toString());

    if(stanza.is("message")){
        var receiverClient = getClient(stanza.attrs.to)
        if(receiverClient === undefined){
            client.send(stanza);
        } else {
            receiverClient.send(stanza);
        }
    }
})

client.on("disconnect", function(){
    console.log("client server", "disconnect");

})
})

var getClient = function (to) {
var clientLength = clients.length;
var client
var clientId;
for(var i = 0; i < clientLength; i++){
    client = clients[i];
    clientId = client.jid.user + "@" + client.jid.domain
    if(to.indexOf(clientId) == 0){
        return client;
    }
}
}