インスタント通信のクライアント編StropheJs.
5782 ワード
サマリ
編集者は数年
どのようにアカウントを追加するか、テストが成功するかなどのツール方法は別の編を参照してください.
トランスファゲート
基礎文法
xmppアドレスとセクション、もう一つの基礎応用層プロトコルのxmpp基礎学習xmppは主にxml形式でデータを伝送し、詳細はxepプロトコルを参照してください.ここではstropheのコンストラクタを使用して、主に以下のように使用します.
プロセスの実行
ログイン認証
ここで、サービス側は実は2つのステップに分かれており、最初のステップは接続であり、接続に成功するとステータスコード1に戻り、それからログインし、ログインに成功するとステータス5に戻ります.詳細なステータスコードはソースコードを参照します.パスワード認証の問題については、plain方式を一時的に採用し、その後、他の方法を更新します.例えば、sha 1です.
単独で話す demo を送信クエリーアーカイブ(履歴ローミング) アーカイブを問い合わせる前に、まずアーカイブ(リポジトリ)が成功したことを確認し、サービス側は【転送ゲート】を表示し、自分で処理します.XEP-0136:Message Archivingを参照してください.
最も簡単なdemo:
成功すると、次の情報が返されます.
14件の履歴メッセージが検出されたことを示し、クエリー・アーカイブはXEP-0313:Message Archive Management、サンプル・コードは「プラグインの使用方法」を参照してください.
グループチャット
グループチャットは単チャットに比べて複雑で、まずグループに入って(ここのグループにはパスワードがありません)、出席して、メッセージを送ります. に出席クエリー群オープン機能情報 メッセージ プッシュ購読
イントラネットスルー
プラグインの使用方法
mamアーカイブクエリーdemo
プラグインは
植えた穴 addHandlersがhandlersを回転したときにコールバック関数が失われた.
参考文献 XMPP高度プログラミング+JavaScriptとjQuery を使用
編集者は数年
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.');
});
ここで、サービス側は実は2つのステップに分かれており、最初のステップは接続であり、接続に成功するとステータスコード1に戻り、それからログインし、ログインに成功するとステータス5に戻ります.詳細なステータスコードはソースコードを参照します.パスワード認証の問題については、plain方式を一時的に採用し、その後、他の方法を更新します.例えば、sha 1です.
単独で話す
var msg = $msg({
to: receiver,
from: 'jid@localhost',
type: 'one',
name: 'zeronlee',
photo: 'image.png'
}).c("body", null,msg);
im.connect.send(msg.tree());
最も簡単な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:'[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);
});
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);
});
イントラネットスルー
プラグインの使用方法
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を使用する」の第3部14章を参照してください.植えた穴
参考文献