XMPP协议中的BOSH是 XMPP server 对外提供的可以支持 http直接访问服务器,一般是是基于长轮询的。
openfire中也提供了这个功能,默认是关闭的需要打开。
后面我们将通过http://host:7070/http-bind/地址来进行连接,这里要特别提一下,这个host,在xmpp中的 jid 即账户 比如 a@host 要保持一致,不然 连接将会失败,你可以在本机的host的配置文件上加上如果openfire在你的本机上的话
这里我将利用Strophe.js库进行连接
一下是部分核心代码
var conn = new Strophe.Connection("http://host:7070/http-bind/");
conn.connect(data.jid, data.password, function (status) {
if (status === Strophe.Status.CONNECTED) {
$(document).trigger('connected');
} else if (status === Strophe.Status.DISCONNECTED) {
$(document).trigger('disconnected');
}
});
$(document).bind('connected', function () {
// inform the user
Hello.log("Connection established.");
Hello.connection.addHandler(Hello.handle_pong, null, "iq", null, "ping1");
var domain = Strophe.getDomainFromJid(Hello.connection.jid);
Hello.send_ping(domain);
});
$(document).bind('disconnected', function () {
Hello.log("Connection terminated.");
// remove dead connection object
Hello.connection = null;
});
send_ping: function (to) {
var ping = $iq({to: to, type: "get", id: "ping1"}).c("ping", {xmlns: "urn:xmpp:ping"});
Hello.log("Sending ping to " + to + ".");
Hello.start_time = (new Date()).getTime();
Hello.connection.send(ping);
},
handle_pong: function (iq) {
var elapsed = (new Date()).getTime() - Hello.start_time;
Hello.log("Received pong from server in " + elapsed + "ms.");
Hello.connection.disconnect();
return false;
}
以上很简单就是一个 ping server的过程。