在Node中,可能没有比node-simple-xmpp更简单的XMPP客户端库了。在这种情况下,向另一个Jabber用户发送消息的最小Node.js脚本如下:
var xmpp = require('simple-xmpp');
var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;
xmpp.on('online', function(data) {
console.log('Connected with JID: ' + data.jid.user);
xmpp.send('testjs@007jabber.com', 'hello! time is '+new Date(), false);
});
xmpp.on('error', function(err) {
console.error("error:", JSON.stringify(err));
});
xmpp.connect({
jid: jid,
password: pwd,
host: server,
port: port
});
xmpp.subscribe('testjs@007jabber.com');
从package.json中可以看出,node-simple-xmpp库依赖于[node-xmpp-client] (https://github.com/xmppjs/xmpp.js/tree/node-xmpp/packages/node-xmpp-client)。
上面的脚本在与Google Talk/Hangouts一起使用时也可以工作(已测试),您只需要将服务器xmpp.jp
替换为talk.google.com
并使用Google账户。打开https://myaccount.google.com/lesssecureapps以启用Node.js脚本使用Google账户登录。
截至https://npms.io/search?q=node-xmpp,还有一些针对Node的XMPP客户端库,但几乎所有这些库都依赖于node-xmpp-client或仅限于BOSH连接(通过HTTP轮询)。
对于那些习惯于在客户端使用Strophe.js的人来说,一个有趣的库是node-strophe。它基于Strophe.js 1.0.2版发布,这是一个适用于任何浏览器的库。不幸的是,该版本除了BOSH之外不支持其他协议(请参见Strophe.js变更日志),websocket仅在1.1.0版之后才可用。
一种没有特定XMPP库的替代解决方案可以使用Net模块,但在这种情况下,您需要管理所有XMPP交互以建立与服务器的连接,请参见https://wiki.xmpp.org/web/Programming_XMPP_Clients。
下面是一个非常简单的脚本示例,尝试使用Net模块启动与Jabber服务器的连接:
var net = require('net');
var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;
var msg = '<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="'+server+'">';
var client = new net.Socket();
client.connect(port, server, function() {
console.log('Connected');
client.write(msg);
});
client.on('data', function(data) {
console.log('Received: ' + data);
});
您可以在控制台日志中看到Jabber服务器的正确答案,但从那时起就会变得混乱:您应该开始交换TLS消息(请参见https://xmpp.org/rfcs/rfc3920.html#tls)。
我认为唯一可行的选择是使用node-simple-xmpp库的第一个选项。
<user>@gmail.com
账户,它们都可以正常使用Hangouts,但每次都出现了“XMPP身份验证失败”的错误。我已经启用了不安全的应用程序,并将服务器设置为talk.google.com
。有什么想法吗? - Dan Dascalescuxmpp.send
处挂起。 - Dan Dascalescu