Strophe.js是为XMPP写的一个js类库。因为http协议本身不能实现持久连接,所以strophe利用BOSH模拟实现持久连接。

连接状态常量

发起一个链接后,会返回一个连接状态

Status.ERROR
错误
Status.CONNECTING
正在创建连接
Status.CONNFAIL
连接创建失败
Status.AUTHENTICATING
正在验证
Status.AUTHFAIL
验证失败
Status.CONNECTED
连接创建成功
Status.DISCONNECTED
连接已关闭
Status.DISCONNECTING
连接正在关闭

创建一个XMPP节点

XMPP节点实质上是XML格式

Strophe提供了Strophe.Builder对象用于更快速的创建XML。

例如

var pres1 = new Strophe.Builder(“presence”);//<presence/>
var pres2 = new Strophe.Builder(“presence”, {to: “example.com”});//<presence to=’example.com’/>

这样书写起来显然比较麻烦,所以Strophe提供了4个全局的别名方法,用于创建XMPP节点:$build(), $msg(), $pres() 和 $iq()。

$build()即Strophe.Builder的别名。另外三个用于创建<message/>, <presence/> 和 <iq/>

var pres1 = $build("presence");//<presence/>
var pres2 = $build("presence", {to: "example.com"});//<presence to=’example.com’/>
var pres3 = $pres();//<presence/>
var pres4 = $pres({to: "example.com"});//<presence to=’example.com’/>

要构建更复杂的格式的话,则需要借助另外一些方法,比如:c(), cnode(), t(), attrs() 和 up()。它们都将返回builder对象。

例如


var stanza = $build("foo").c("bar").c("baz");
//<foo><bar><baz/></bar></foo>
var stanza = $build("foo").c("bar").up().c("baz");
//<foo><bar/><baz/></foo>
var message = $msg({to: "darcy@pemberley.lit", type: "chat"})
    .c("body").t("How do you do?");
//<message to=’darcy@pemberley.lit’type=’chat’>
//	<body>How do you do?</body>
//</message>
var iq = $iq({to: "pemberley.lit", type: "get", id: "disco1"})
    .c("query", {xmlns: "http://jabber.org/protocol/disco#info"});
//<iq to='pemberley.lit' type='get' id='disco1'>
//    <query xmlns='http://jabber.org/protocol/disco#info'/>
//</iq>
var presence = $pres().c("show").t("away").up().c("status").t("Off to Meryton");
//<presence>
//    <show>away</show>
//    <status>Off to Meryton</status>
//</presence>

JID辅助方法用于从JID上获取不同的信息。

例如


Strophe.getUserFromJid("karma@fayfox.cn/library"); // "karma"
Strophe.getDomainFromJid("karma@fayfox.cn/library"); // "fayfox.cn"
Strophe.getResourceFromJid("karma@fayfox.cn/library"); // "library"
Strophe.getBareJidFromJid("karma@fayfox.cn/library"); // "karma@fayfox.cn