摘要:解析的最終結果是,上下線通知。解析的結果是,同時可以通過和構建父子級別元素。單聊發送查詢歸檔歷史記錄漫游查詢歸檔之前,首先是要確保歸檔存庫成功,服務端查看傳送門,自行處理,參見。栽過的坑轉的時候回調函數丟失參考文獻高級編程使用和
摘要
小編是個寫了幾年php的碼農, 接觸純Js的項目這也是頭一次,另外,IM的服務端是Java(tigase框架) ,為了解決舊版本BOSH(長輪詢)即時消息不穩定問題,決定更換pc網頁版為websockt鏈接, App用socket直連,特此更新服務端到8.0,更新安裝期間遇到了不少坑,再次記錄,熟練IM或者xmpp協議用法的不用繼續看了。
怎么添加賬戶,測試是否成功等工具方法見另一篇
傳送門基礎語法
xmpp尋址和節,另一篇基礎 應用層協議之xmpp基礎學習
xmpp主要是以xml格式傳輸數據,詳細請看xep協議,這里用strophe的構建器,主要用到的如下:
$iq,info query,主要用來查詢服務器信息,解析的最終結果是執行流程 登陸認證。 $pres,解析的最終結果是 ,上下線通知。 $msg, 解析的結果是 ,同時可以通過.up()和.c()構建xml父子級別元素。
im.connect = new Strophe.Connection("ws://localhost:5290/xmpp-websocket/"); im.connect.connect("jid@localhost","pass",function(){ console.info("this is login callback."); });
這里,服務端其實是分為兩步走,第一步是連接,連接成功后會返回狀態碼1,然后是登陸,登陸成功后返回狀態5,詳細的狀態碼參考源碼:
關于密碼認證的問題,暫時采取plain方式,后續更新其他方式,比如:sha1。
發送demo
var msg = $msg({ to: receiver, from: "jid@localhost", type: "one", name: "zeronlee", photo: "image.png" }).c("body", null,msg); im.connect.send(msg.tree());
查詢歸檔(歷史記錄漫游)
查詢歸檔之前,首先是要確保歸檔(存庫)成功,服務端查看【傳送門】,自行處理,參見XEP-0136: Message Archiving。
最簡單的demo:
var iq = $iq({type: "set"}).c("query", {xmlns: "urn:xmpp:mam:1"}); im.connect.sendIQ(iq, function(a){ console.log("sent iq",a); $(a).find("item").each(function(){ var jid = $(this).attr("jid"); // jid console.log("jid",jid); }); });
成功后返回以下信息:
nAhOrNd/DNXBFtivwbm/vrN8I4GL2SLkc76eNmN0ruw= cnosUN6U9Md6o8TvLD42rB6jJnfPKF2DxkEBFmuK/IQ= 14
表明查出了14條歷史消息,查詢歸檔更多見XEP-0313: Message Archive Management,示例代碼見《插件使用方法》。
群聊群聊相對單聊要復雜的多,首先是入群(這里的群沒有密碼),出席,發消息。
出席
var presence = $pres({from:"im7858@localhost",to:"6043@muc.localhost"}).c("x", {xmlns: "http://jabber.org/protocol/muc"}).c("history", {maxstanzas: 0, maxchars:0, seconds:0}); im.connect.send(presence, function(a){ console.log("sent presence",a); });
查詢群開放功能信息
var presence = $iq({from:"im7858@localhost@muc.localhost"}).c("query", {xmlns: "http://jabber.org/protocol/disco#items"}); im.connect.send(presence, function(a){ console.log("sent presence",a); });
發消息同單聊
訂閱推送 內網穿透 插件使用方法mam歸檔查詢demo
/* XEP-0313: Message Archive Management * Copyright (C) 2012 Kim Alvefur * * This file is MIT/X11 licensed. Please see the * LICENSE.txt file in the source package for more information. * * Modified by: Chris Tunbridge (github.com/Destreyf/) * Updated to support v0.3 of the XMPP XEP-0313 standard * http://xmpp.org/extensions/xep-0313.html * */ Strophe.addConnectionPlugin("mam", { _c: null, _p: [ "with", "start", "end" ], init: function (conn) { this._c = conn; Strophe.addNamespace("MAM", "urn:xmpp:mam:1"); }, query: function (jid, options) { var _p = this._p; var attr = { type:"set", from:jid }; options = options || {}; var mamAttr = {xmlns: Strophe.NS.MAM, with:jid}; if (!!options.queryid) { mamAttr.queryid = options.queryid; delete options.queryid; } var iq = $iq(attr).c("query", mamAttr); // var i; // for (i = 0; i < this._p.length; i++) { // var pn = _p[i]; // var p = options[pn]; // delete options[pn]; // if (!!p) { // iq.c("field",{var:pn}).c("value").t(p).up().up(); // } // } // iq.up(); // var onMessage = options.onMessage; delete options.onMessage; var onComplete = options.onComplete; delete options.onComplete; //////////////////////////////////////////////// // iq.cnode(new Strophe.RSM(options).toXML()); var _c = this._c; var handler = _c.addHandler(onMessage, null, "message", null); return this._c.sendIQ(iq, function (a) { console.log(a); _c.deleteHandler(handler); onComplete.apply(this, arguments); }, function (err) { //error callBack function console.log("Error Response from server:", err); }); } });
插件必須是Strophe.addConnectionPlugin("mam", {init:function(){}})結構才得以成功加載,用webpack或者頁面加載進來之后自動實例化init,群聊就是以插件形式使用,當然還可以自定義其他更高級的,具體參考《XMPP高級編程+使用JavaScript和jQuery》第三部分十四章。
栽過的坑addHandlers轉handlers的時候回調函數丟失.
參考文獻XMPP高級編程+使用JavaScript和jQuery
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/105596.html
摘要:摘要是一個應用層協議,主要做網頁版即時通訊,是基于和實現,服務端常見的框架有等,這三個都親自踩過坑,唯有相對牛逼完善一些,客戶端主要就是了。 摘要 xmpp是一個應用層協議,主要做網頁版即時通訊,是基于RFC3920和RFC3921實現,服務端常見的框架有openfire,tigase,prosody等,這三個都親自踩過坑,唯有tigase8.0相對牛逼(完善)一些,客戶端主要就是st...
摘要:網易云信即時通訊云服務的產品優勢網易云信涉足多元行業提升用戶體驗滿足內外協同今年月,網易云信正式宣布通信與視頻業務實現戰略升級?! №n寒導演的影片《乘風破浪》中,有這樣一個片段,在六一還堅持囤BB機有前途的時候,從事電腦編程和軟件開發的小馬則認為即時通訊才是未來的發展方向。看到這里,很多觀影者都不謀而合地笑了,小馬口中的即時通訊就是在1999年誕生的OICQ。影片中阿浪說的那句話沒錯,這個世...
閱讀 2161·2021-09-04 16:40
閱讀 1452·2021-08-13 15:07
閱讀 3605·2019-08-30 15:53
閱讀 3194·2019-08-30 13:11
閱讀 1069·2019-08-29 17:22
閱讀 1811·2019-08-29 12:47
閱讀 1469·2019-08-29 11:27
閱讀 2221·2019-08-26 18:42