XMPPの紹介
- 2. 自己紹介
神戸 隆行(かんど たかゆき)、PN. 椎路ちひろ(しいじ ちひろ)
Twitter: @ChihiroShiiji / FB: takayuki.kando
出身は名古屋、趣味イラストとコスプレ
本業は九大の社会人博士課程で博士を取ろうとしながら研究開発に従事する有
期雇用の勤め人@百道浜
専門は流転中:
数値解析(のプログラミング・インターフェースの改良、修論@名大)
→数式処理(のプログラミング・インターフェースの改良@某F研)
→プログラム最適化(博士課程一回目の失敗@東工大)
(2005年に仕事を紹介され福岡へ来た)
→コンパイラ開発(Redefis、動的再構成可能プロセッサ向けコンパイラ)
→SW/HW開発環境(IDE上からクラウド上の開発ツールを利用できるミドルウェア
PTaaSの開発) http://www.qualiarc.com/?post_type=seihin&p=202
使用プログラミング言語:
最初はFORTRAN、大学以降はC++とC、今は主にJava、他は必要に応じてボチボチ
本日は趣味と仕事で利用しているXMPPの紹介
幾つかのソースとサンプルをGitHub[ https://github.com/TakayukiKando/Lore ]に置いてます
2015/04/122 第11回福岡市西区プログラム勉強会
- 4. XMPPとは
XMPP: eXtensible Messaging and Presence
Protocol(旧名: jabbar)
標準化団体: http://xmpp.org/
コア部分はRFCとしてIETFへ出されるが、そのRFCの内容の検討
XMPP内の拡張(XEP: XMPP Extension Protocols)の 策定
インスタント・メッセージングとプレゼンス(状態)情報のための
オープンなプロトコル
例:GoogleTalk…残念ながらサービス終了
まだだ、まだ終わらんよ!
規格の制定プロセスは進行中
さまざまなクライアントやサーバの実装も存続中
現状、インスタント・メッセージング・サービスは特定の企業が提供し、
プロトコルが非公開であるものが多い
SNSの機能の一部として提供されていることも多い
4
- 9. ユーザID: Jabber ID(JID)
ユーザ・アカウント、ユーザが利用する個々の接続、サーバ、サー
バの拡張機能といったものを一意に識別する名前
メッセージなどを配信する際に宛先として使用する
連絡先リストの識別子(ID)でもある
このようにユーザはクライアントの接続毎に識別できるため複数個所
からの接続が可能
一般形は:
<ユーザ名>@<サービス名>/<リソース名>
例:
xmpp.xgmtk.orgというDNS名のXMPPサーバ: xmpp.xgmtk.org
上記サーバのユーザkando: kando@xmpp.xgmtk.org
上記ユーザkandoが使うクライアントclient :
kando@xmpp.xgmtk.org/client
上記サーバの拡張コンポーネントchatroom:
chatroom.xmpp.xgmtk.org
名称はXMPPがかつてJabberと呼ばれていたことによる
- 11. IRCとXMPPの比較
IRC XMPP
ユーザ・アドレス なし あり
ユーザ間メッセージング なし(DCCでは可能) あり
拡張機能 なし(DCCではファイル転
送可能)
音声通話、映像通話、ファ
イル転送、他
連絡先リスト なし あり
プレゼンス なし あり
会議室(チャット) チャネル
ユーザはチャネルを作成
できる
チャネルを指定して参加
チャネルは参加者がい
なくなると自動消失
チャットルーム
サーバにチャットルーム
を設置できる
管理者を指定できる
明示的に削除するまで
利用者がいなくても存続
サーバ間接続 ツリー・トポロジー、サーバ
間リレー
サーバ間は直接接続のみ。
リレーはしない
※ DCC: IRCの拡張、ユーザ間の直接チャットとファイル転送を可能にする。規格化はされていない
- 12. XMPPとHTTPの比較
12
HTTP XMPP
開発された目
的
ドキュメント公開、ファイル転送 インスタント・メッセージング
通信のモデル 厳密なサーバ・クライアント型、
プル型、subscribe不要
サーバ・クライアント型、プッシュ型、
subscribeに基づくユーザー管理
セッション管理 なし、cookieなどを用いプログラ
マが行う
あり(ログインからログアウトまでが1
セッション、この間基本的に接続しっ
ぱなし)
認証/暗号化 なし、行う場合は単位となるアク
セス(GETやPOST)毎
セッション開始時に認証、暗号化方
式の協議も行う
拡張可能性 プロトコル自身にはなし、コンテ
ンツにスクリプトやフォームを含
めることで対応
XMLによりプロトコルが定義され、
XMLの名前空間の仕組みを利用して
プロトコル自身の拡張が可能
- 17. XMPPセッションの例:クライアント→サーバ
<?xml version="1.0"?>
<stream:stream to="xmpp.xgmtk.org" version="1.0" xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams">
<!-- …… -->
<presence>
<show>away</show>
<status>I am attending to Nishi-Pro.</status>
</presence>
<!-- …… -->
<message type="chat" to="choonggeun@xmpp.xgmtk.org">
<body>Hello!!</body>
</message>
<!-- …… -->
</stream:stream>
toによるメッセージの宛先指定
fromアトリビュートはサーバが
付加して受信側に送るのでクラ
イアントは偽装できない
セッションの開始
セッションの終了
プレゼンス情報の送信、toがない場合はサーバに
より必要な範囲へ配信される
メッセージ本文
- 18. 拡張規格(XEP)の例(1)
Data Forms(XEP-0004)
クライアントからの各種問合せに必要な情報の入力を促すフォームの
定義法
Jabber RPC(XEP-0009)
XML RPCのXMPP版
Service Discovery(Disco) (XEP-0030)
ネットワークにどのような機能を備えたサーバや、サーバ拡張やクライ
アントが繋がっているかを調べるサービス発見プロトコル
Multi-User Chat(XEP-0045)
チャット・ルームを実現する
Ad-Hoc commands(XEP-0050)
サーバーサイドの設定等をクライアントに設定Wizard風に尋ねる規格
Pub Sub(XEP-0060)
登録ユーザに向けてマイクロBlogやRSS風の情報のマルチキャストを
行う
- 19. 拡張規格(XEP)の例(2)
XHTML-IM (XEP-0071)
文を構造化し修飾する限定的なHTMLメッセージの規格
User Avatar (XEP-0084)
ユーザのアバター(アイコン)画像の扱い
Stream Initiation (XEP-0095, XEP-0096)
ファイル転送等に使えるデータストリームのネゴシエーションの規格
群
User Mood (XEP-0107)
「気分」を表す情報の扱い
User Tune (XEP-0118)
「現在聞いている曲」などの情報の扱い
Jingle (XEP-0166他)
新しいストリーム、ファイル転送、音声通話、映像通話のためのネゴ
シエーションの規格群
- 20. まとめ
XMPPの概要と特長
インスタントメッセージング&プレゼンスの説明
XMPPの基本的な概念の説明
他プロトコルとの比較
HTTP, IRC, SMTP&POP
XMPPの拡張可能性、プロトコルの定義と通信例
拡張規格の例
…十分長くなってしまったのでプログラミングは次回以降に
参考書
「マスタリングXMPP」
Peter Saint-Andre、Kevin Smith、Remko Troncon 著、牧野 聡 訳
O'Reilly Japan, Inc. 刊、2010年4月
http://www.oreilly.co.jp/books/9784873114477/
各種拡張プロトコル規格書
http://xmpp.org/xmpp-protocols/xmpp-extensions/
Editor's Notes
- ここで分散ビルド・ミドルウェアで用いられているXMPPというプロトコルについて補足:
- ここで分散ビルド・ミドルウェアで用いられているXMPPというプロトコルについて補足: