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