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