xmppの紹介

20

Click here to load reader

Upload: takayuki-kando

Post on 11-Apr-2017

1.020 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: XMPPの紹介

XMPP の紹介神戸隆行(椎路ちひろ) Twitter: @ChihiroShiiji / FB: takayuki.kando

2015/12/06 (第 12.5 回福岡市西区プログラム勉強会資料)

Page 2: XMPPの紹介

自己紹介 神戸 隆行(かんど たかゆき)、 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 回福岡市西区プログラム勉強会

Page 3: XMPPの紹介

この発表の内容 XMPP の概要と特長 インスタントメッセージング&プレゼンスの説明 XMPP の基本的な概念の説明 他プロトコルとの比較

HTTP, IRC, SMTP&POP XMPP の拡張可能性、プロトコルの定義と通信例

拡張規格の例… 十分長くなってしまったのでプログラミングは次回以降に

Page 4: XMPPの紹介

XMPP とは XMPP: eXtensible Messaging and Presence

Protocol( 旧名: jabbar) 標準化団体: http://xmpp.org/

コア部分は RFC として IETF へ出されるが、その RFC の内容の検討 XMPP 内の拡張( XEP : XMPP Extension Protocols) の 策定

インスタント・メッセージングとプレゼンス(状態)情報のためのオープンなプロトコル 例: GoogleTalk… 残念ながらサービス終了

まだだ、まだ終わらんよ! 規格の制定プロセスは進行中 さまざまなクライアントやサーバの実装も存続中

現状、インスタント・メッセージング・サービスは特定の企業が提供し、プロトコルが非公開であるものが多い SNS の機能の一部として提供されていることも多い

4

Page 5: XMPPの紹介

XMPP の狙いと特長 狙い:

メール、 IRC 、 Web 上の各種メッセージングサービス、マイクロ Blog 、 RSS といったプッシュ通知を伴うテキスト送受信サービスの機能を包含し、置き換えることも可能なプロトコル 既存のオープンでない企業独自のメッセージングサービスを置き換え可能であるオープンなプロトコル

特長: オープン

オープンな制定プロセス ドキュメントもオープン・アクセス

拡張可能(詳細は後述) プロトコル自身をセキュアに拡張可能 クライアントもサーバも段階的にプロトコルをサポートすることで機能を追加可能

セキュア(詳細は後述) サーバ間のリレー接続を排し、セキュアなサーバのみでのネットワークの実現を可能にする 連絡先リストによりSPAMユーザを拒否し易くする 拡張可能なプロトコルにより、実行可能なダウンロードコンテンツによる拡張を必要としない

Page 6: XMPPの紹介

インスタント・メッセージング テキスト・メッセージングはメール、チャットなどユーザ間でテキストメッセージを送り合うサービスの総称

中でもインスタント・メッセージングは両者がオンラインであれば即時にメッセージを送受信できるサービス ただし XMPP ではメールのようにオフライン状態のユーザあてのメッセージを蓄積して後で配送することもできる(オフライン・メッセージ)

基本は 1対 1 ただし XMPP は:

複数人での会議もサポート(チャット) マイクロブログ、 RSS に似たマルチキャスト配信もサポート( PubSub )

拡張機能: 音声通話、映像通話、ファイル転送、…… etc. ( Stream Initiation 、 JIngle )

メッセージングのために必要な連絡先リスト( Roster )の管理も含む 連絡を許すユーザの登録、拒否するユーザの登録など

Page 7: XMPPの紹介

プレゼンス ユーザの状態をマルチキャストする機能

送られる状態の例: オンライン、オフライン、ビジー、離席、… etc. 任意のショート・テキスト メッセージ入力中を示す通知

連絡先リスト (Roster) に登録されている相手にだけ配信される 拡張機能:

ユーザーアバター(所謂「アイコン」)画像 現在聞いている曲 …etc.

Page 8: XMPPの紹介

XMPPネットワークの構造と機能XMPPサーバ

XMPPクライアントXMPPサーバ・コンポーネント

XMPPクライアントXMPPクライアントXMPPクライアント

他所のXMPPサーバ

UserA

UserB

ボット(ユーザがおらず自動応答するクライアント)

サーバに機能を追加するメッセージ等をルーティングするユーザを認証するユーザーアカウント情報を管理するユーザの連絡先リストを管理するオフライン・メッセージを保管する

実装ポリシー:クライアントは UI に専念サーバ側に様々な機能を実現することが推奨されている

Page 9: XMPPの紹介

ユーザ ID : Jabber ID(JID) ユーザ・アカウント、ユーザが利用する個々の接続、サーバ、サーバの拡張機能といったものを一意に識別する名前

メッセージなどを配信する際に宛先として使用する 連絡先リストの識別子( ID )でもある このようにユーザはクライアントの接続毎に識別できるため複数個所からの接続が可能

一般形は: <ユーザ名>@<サービス名> /<リソース名>

例: xmpp.xgmtk.org という DNS 名の XMPP サーバ: xmpp.xgmtk.org 上記サーバのユーザ kando : [email protected] 上記ユーザ kando が使うクライアント client :

[email protected]/client 上記サーバの拡張コンポーネント chatroom : chatroom.xmpp.xgmtk.org

名称は XMPP がかつて Jabber と呼ばれていたことによる

Page 10: XMPPの紹介

XMPPネットワークの特徴

Server

Client

Client

Client

Server

Server

Client

Client

Client

Server

Server

Server

Server

Server

Server

メール( SMTP+POP)サーバ間通信あり

他サーバにはサーバ間中継ありクライアントは一つのサーバに接続プッシュ型プロトコルセッション管理なしSubscribe不要

XMPPサーバ間通信あり

ただしサーバー間は直接接続で中継はないクライアントは複数のサーバに直接接続可プッシュ型プロトコルセッション管理ありSubscribe 必要

Web(HTTP)サーバ間通信なしクライアントは複数のサーバに直接接続プル型プロトコルセッション管理なしSubscribe不要

Client

Client

Client

10

Page 11: XMPPの紹介

IRC と XMPP の比較IRC XMPP

ユーザ・アドレス なし ありユーザ間メッセージング なし( DCC では可能) あり拡張機能 なし( DCC ではファイ

ル転送可能)音声通話、映像通話、ファイル転送、他

連絡先リスト なし ありプレゼンス なし あり会議室(チャット) チャネル

ユーザはチャネルを作成できるチャネルを指定して参加チャネルは参加者がいなくなると自動消失

チャットルームサーバにチャットルームを設置できる管理者を指定できる明示的に削除するまで利用者がいなくても存続

サーバ間接続 ツリー・トポロジー、サーバ間リレー

サーバ間は直接接続のみ。リレーはしない

※ DCC : IRC の拡張、ユーザ間の直接チャットとファイル転送を可能にする。規格化はされていない

Page 12: XMPPの紹介

XMPP と HTTP の比較

12

HTTP XMPP開発された目的

ドキュメント公開、ファイル転送

インスタント・メッセージング通信のモデル 厳密なサーバ・クライアント型、

プル型、 subscribe不要サーバ・クライアント型、プッシュ型、 subscribe に基づくユーザー管理

セッション管理

なし、 cookie などを用いプログラマが行う

あり(ログインからログアウトまでが 1 セッション、この間基本的に接続しっぱなし)

認証 /暗号化 なし、行う場合は単位となるアクセス (GET や POST)毎

セッション開始時に認証、暗号化方式の協議も行う

拡張可能性 プロトコル自身にはなし、コンテンツにスクリプトやフォームを含めることで対応

XML によりプロトコルが定義され、XML の名前空間の仕組みを利用してプロトコル自身の拡張が可能

Page 13: XMPPの紹介

XMPP の拡張可能性 将来の必要に対応できる柔軟性 プロトコルがコア・プロトコル+拡張プロトコルの集合となりサーバやクライアントの実装を段階的に機能強化可能 XMPP ではプロトコルを安全に拡張できる

XMLによるプロトコルの定義 HTTP には拡張可能性がないので機能拡張は以下により行われてきた:

コンテンツの動的生成( CGI 、 PHP 、… etc. ) 実行可能コンテンツの配布( JavaScript 、 Flash 、… etc. )

Page 14: XMPPの紹介

XML によるプロトコル定義 XMPP のプロトコルは XML を通じて定義される XML の解析、検証、生成、拡張の仕組みを利用して

XMPP の「パケット」の解析、検証、生成、拡張を行うことができる 実際、入力の処理には XML パーサが、出力の生成にはXMLフォーマッタが利用される 規格においてプロトコルの形式的な定義は XML

Schema で記述されている XMLの名前空間の仕組みを利用してプロトコルの拡張が定義されている

形式的な厳密さと拡張可能性の両立

Page 15: XMPPの紹介

XML文書としての XMPP セッション XMPP の通信の 1 セッションは 2 つ 1組の XML文書の送受信と看做すことができる

入出・出力のデータ列をそれぞれまとめてストリーム・オブジェクトと看做すことができるのと同じアイディア XMPP の通信セッションは全て 1対のXML文書となる

クライアントとサーバ間 サーバとサーバの間 サーバとサーバ拡張コンポーネントの間 …etc.

Page 16: XMPPの紹介

XML文書としての構造 XML文書のトップレベル要素は Stream 要素

XMPP のセッションに対応 トップレベルの直下にはスタンザと総称される 3 種類の要素がある

俗には「パケット」とも称される 各種拡張は多くの場合スタンザに子要素を追加して行われる

スタンザ Presence 要素 : プレゼンス情報を表すスタンザ Message 要素: テキスト・メッセージを表すスタンザ IQ 要素: 各種問合せやデータの送受信に利用されるスタンザ

Page 17: XMPPの紹介

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="[email protected]"> <body>Hello!!</body> </message><!-- …… --></stream:stream>

to によるメッセージの宛先指定from アトリビュートはサーバが付加して受信側に送るのでクライアントは偽装できない

セッションの開始

セッションの終了

プレゼンス情報の送信、 to がない場合はサーバにより必要な範囲へ配信される

メッセージ本文

Page 18: XMPPの紹介

拡張規格 (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風の情報のマルチキャストを行う

Page 19: XMPPの紹介

拡張規格 (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 他 )

新しいストリーム、ファイル転送、音声通話、映像通話のためのネゴシエーションの規格群

Page 20: XMPPの紹介

まとめ 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/