Fluux XMPP は、シンプルさ、シンプルな自動化、IoT に重点を置いたgo xmppライブラリです。
目標は、単純な XMPP クライアントとコンポーネントを簡単に作成できるようにすることです。
このライブラリは、依存関係が最小限になるように設計されています。現在、少なくとも Go 1.13 が必要です。
ドメイン名と証明書チェーンのチェックを無効にすることはお勧めできません。そうすると、クライアントが中間者攻撃にさらされることになります。
ただし、開発時には、XMPP サーバーは自己署名証明書を使用することがよくあります。このような状況では、証明書に署名したルート CA をルート CA の信頼できるリストに追加することをお勧めします。これにより、コードの変更が回避され、安全でないクライアントを運用環境に移行するリスクが制限されます。
ただし、クライアントが TLS 証明書を信頼できるようにしたい場合は、Go 標準のtls.Config
カスタマイズして Config 構造体に設定できます。
以下は、自己署名証明書を使用してサーバーに接続できるようにクライアントを構成するコード例です。 InsecureSkipVerify
オプションに注目してください。このtls.Config
オプションを使用すると、証明書のすべてのチェックがスキップされます。
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
XMPP スタンザは、基本的な拡張可能な XML 要素です。スタンザ (または「ノンザ」と呼ばれる特別なスタンザ) は、XMPP プロトコル機能を活用するために使用されます。セッション中、クライアント (またはコンポーネント) とサーバーはスタンザをやり取りします。
低レベルでは、スタンザは XML フラグメントです。ただし、Fluux XMPP ライブラリは、高レベルでスタンザと対話するためのビルディング ブロックを提供し、Go フレンドリーな API を提供します。
stanza
サブパッケージは、XMPP ストリームの解析、XMPP スタンザのマーシャリングおよびアンマーシャリングのサポートを提供します。これは、高レベルの Go 構造と低レベルの XMPP プロトコルの間のブリッジです。
解析、マーシャリング、およびアンマーシャリングは、Fluux XMPP クライアント ライブラリによって自動的に処理されます。開発者は通常、スタンザ パッケージによって提供される高レベルの構造体のみを操作します。
XMPP プロトコルは、名前が示すように拡張可能です。アプリケーションがカスタム スタンザ拡張機能を使用している場合は、独自の拡張機能を独自のアプリケーションに直接実装できます。
スタンザ パッケージの詳細については、スタンザ パッケージのドキュメントを参照してください。
TODO
TODO
Fluux XMPP ライブラリの使用を開始するのに役立つ例がいくつかあります。
デモの「echo」クライアントは次のとおりです。
package main
import (
"fmt"
"log"
"os"
"gosrc.io/xmpp"
"gosrc.io/xmpp/stanza"
)
func main () {
config := xmpp. Config {
TransportConfiguration : xmpp. TransportConfiguration {
Address : "localhost:5222" ,
},
Jid : "test@localhost" ,
Credential : xmpp . Password ( "test" ),
StreamLogger : os . Stdout ,
Insecure : true ,
// TLSConfig: tls.Config{InsecureSkipVerify: true},
}
router := xmpp . NewRouter ()
router . HandleFunc ( "message" , handleMessage )
client , err := xmpp . NewClient ( config , router , errorHandler )
if err != nil {
log . Fatalf ( "%+v" , err )
}
// If you pass the client to a connection manager, it will handle the reconnect policy
// for you automatically.
cm := xmpp . NewStreamManager ( client , nil )
log . Fatal ( cm . Run ())
}
func handleMessage ( s xmpp. Sender , p stanza. Packet ) {
msg , ok := p .(stanza. Message )
if ! ok {
_ , _ = fmt . Fprintf ( os . Stdout , "Ignoring packet: %T n " , p )
return
}
_ , _ = fmt . Fprintf ( os . Stdout , "Body = %s - from = %s n " , msg . Body , msg . From )
reply := stanza. Message { Attrs : stanza. Attrs { To : msg . From }, Body : msg . Body }
_ = s . Send ( reply )
}
func errorHandler ( err error ) {
fmt . Println ( err . Error ())
}
コードのドキュメントは GoDoc: gosrc.io/xmpp で入手できます。