我在节点js和xmpp中进行了第一步
我需要在节点js上的xmpp服务器上运行以进行消息传递
这是过程:我使用node-xmpp服务器https://github.com/astro/node-xmpp 运行服务器示例(/examples/c2s.js)加入到具有两个客户端的服务器(在其他服务器上测试的客户端jabber - 它工作,消息发送通过)
客户端在我的服务器上拥有授权.但是,当我从一个客户端向另一个客户端发送消息时,消息将发送到服务器(我在日志中看到它),这就是消息未发送给收件人
我不知道在哪里寻找问题服务器配置?路由?添加自己可能需要消息传递?
帮帮我
我的服务器代码(通过示例)
var xmpp = require('../lib/node-xmpp');
var c2s = new xmpp.C2SServer({
port: 5222,
domain: 'localhost'
});
// On Connect event. When a client connects.
c2s.on("connect", function(client) {
c2s.on("register", function(opts, cb) {
console.log("REGISTER");
cb(true);
});
client.on("authenticate", function(opts, cb) {
console.log("AUTH" + opts.jid + " -> " +opts.password);
cb(null);
});
client.on("online", function() {
console.log("ONLINE");
client.send(new xmpp.Message({ type: 'chat' }).c('body').t("Hello there, little client."));
});
client.on("stanza", function(stanza) {
console.log("STANZA" + stanza);
});
client.on("disconnect", function(client) {
console.log("DISCONNECT");
});
});
Run Code Online (Sandbox Code Playgroud)
我运行一个服务器并通过此代码连接到它
var xmpp = require('../lib/node-xmpp');
var argv = process.argv;
if (argv.length < 6) {
console.error('Usage: node send_message.js <my-jid> <my-password> <my-text> <jid1> [jid2] ... [jidN]');
process.exit(1);
}
var cl = new xmpp.Client({ jid: argv[2], password: argv[3] });
cl.addListener('online',
function() {argv.slice(5).forEach(
function(to) {cl.send(new xmpp.Element('message', { to: to,type: 'chat'}).c('body').t(argv[4]));
});
// nodejs has nothing left to do and will exit
// cl.end();
});
cl.addListener('stanza',
function(stanza) {
if (stanza.is('message') &&
// Important: never reply to errors!
stanza.attrs.type !== 'error') {
console.log("New message");
// Swap addresses...
stanza.attrs.to = stanza.attrs.from;
delete stanza.attrs.from;
// and send back.
cl.send(stanza);
}
});
cl.addListener('error',
function(e) {
console.error(e);
process.exit(1);
});
Run Code Online (Sandbox Code Playgroud)
简短的回答:cb(null)改为cb(null, opts).
答案很长:
client.on("authenticate", function(opts, cb) {...})注册客户端尝试验证自身时服务器将执行的操作.在node-xmpp内部,它将首先查找身份验证机制,然后该机制将调用回调并通过以下方式检索身份验证结果cb.
默认情况下,使用Plain身份验证.您可以在这里查看它的工作原理:https://github.com/node-xmpp/node-xmpp-server/blob/master/lib/authentication/plain.js.使用Plain opts存储jid和密码.
然后告知node-xmpp认证失败/过度,我们需要查看mechanism,https://github.com/node-xmpp/node-xmpp-server/blob/master/lib/authentication/mechanism.js,继承者平原.
this.authenticate(this.extractSasl(auth), function (err, user) {
if (!err && user) {
self.success(user)
} else {
self.failure(err)
}
})
这里cb需要两个参数.如果err为null且user为非null,则表示身份验证成功.否则,失败了.
我对 node.js 和 xmpp 都不是专家。但是阅读你的代码。我假设“节”是客户端发送消息的事件。您要求它记录消息,但没有说明如何将其发送给收件人。您应该将服务器上收到的消息分解为消息正文和收件人,并要求服务器将其发送给收件人。
| 归档时间: |
|
| 查看次数: |
9846 次 |
| 最近记录: |