成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

即時通訊之客戶端篇StropheJs.

ChristmasBoy / 1552人閱讀

摘要:解析的最終結果是,上下線通知。解析的結果是,同時可以通過和構建父子級別元素。單聊發(fā)送查詢歸檔歷史記錄漫游查詢歸檔之前,首先是要確保歸檔存庫成功,服務端查看傳送門,自行處理,參見。栽過的坑轉的時候回調(diào)函數(shù)丟失參考文獻高級編程使用和

摘要

小編是個寫了幾年php的碼農(nóng), 接觸純Js的項目這也是頭一次,另外,IM的服務端是Java(tigase框架) ,為了解決舊版本BOSH(長輪詢)即時消息不穩(wěn)定問題,決定更換pc網(wǎng)頁版為websockt鏈接, App用socket直連,特此更新服務端到8.0,更新安裝期間遇到了不少坑,再次記錄,熟練IM或者xmpp協(xié)議用法的不用繼續(xù)看了。

怎么添加賬戶,測試是否成功等工具方法見另一篇

傳送門
基礎語法

xmpp尋址和節(jié),另一篇基礎 應用層協(xié)議之xmpp基礎學習
xmpp主要是以xml格式傳輸數(shù)據(jù),詳細請看xep協(xié)議,這里用strophe的構建器,主要用到的如下:

$iq,info query,主要用來查詢服務器信息,解析的最終結果是。
$pres,解析的最終結果是,上下線通知。
$msg, 解析的結果是,同時可以通過.up()和.c()構建xml父子級別元素。
執(zhí)行流程 登陸認證
im.connect = new Strophe.Connection("ws://localhost:5290/xmpp-websocket/");
im.connect.connect("jid@localhost","pass",function(){
    console.info("this is login callback.");
});

這里,服務端其實是分為兩步走,第一步是連接,連接成功后會返回狀態(tài)碼1,然后是登陸,登陸成功后返回狀態(tài)5,詳細的狀態(tài)碼參考源碼:

關于密碼認證的問題,暫時采取plain方式,后續(xù)更新其他方式,比如:sha1。

單聊

發(fā)送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,示例代碼見《插件使用方法》。

群聊

群聊相對單聊要復雜的多,首先是入群(這里的群沒有密碼),出席,發(fā)消息。

出席

   var presence = $pres({from:"im7858@localhost",to:"[email protected]"}).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);
   
    });

查詢?nèi)洪_放功能信息

var presence = $iq({from:"im7858@[email protected]"}).c("query", {xmlns: "http://jabber.org/protocol/disco#items"});
im.connect.send(presence, function(a){
    console.log("sent presence",a);

});

發(fā)消息同單聊

訂閱推送 內(nèi)網(wǎng)穿透 插件使用方法

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的時候回調(diào)函數(shù)丟失.

參考文獻

XMPP高級編程+使用JavaScript和jQuery

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/105596.html

相關文章

  • 即時通訊服務端Tigase.

    摘要:摘要是一個應用層協(xié)議,主要做網(wǎng)頁版即時通訊,是基于和實現(xiàn),服務端常見的框架有等,這三個都親自踩過坑,唯有相對牛逼完善一些,客戶端主要就是了。 摘要 xmpp是一個應用層協(xié)議,主要做網(wǎng)頁版即時通訊,是基于RFC3920和RFC3921實現(xiàn),服務端常見的框架有openfire,tigase,prosody等,這三個都親自踩過坑,唯有tigase8.0相對牛逼(完善)一些,客戶端主要就是st...

    msup 評論0 收藏0
  • 即時通訊云行業(yè)提速 網(wǎng)易云信何以登上科技

    摘要:網(wǎng)易云信即時通訊云服務的產(chǎn)品優(yōu)勢網(wǎng)易云信涉足多元行業(yè)提升用戶體驗滿足內(nèi)外協(xié)同今年月,網(wǎng)易云信正式宣布通信與視頻業(yè)務實現(xiàn)戰(zhàn)略升級?! №n寒導演的影片《乘風破浪》中,有這樣一個片段,在六一還堅持囤BB機有前途的時候,從事電腦編程和軟件開發(fā)的小馬則認為即時通訊才是未來的發(fā)展方向??吹竭@里,很多觀影者都不謀而合地笑了,小馬口中的即時通訊就是在1999年誕生的OICQ。影片中阿浪說的那句話沒錯,這個世...

    mengera88 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<