Fluux XMPP adalah perpustakaan go xmpp , yang berfokus pada kesederhanaan, otomatisasi sederhana, dan IoT.
Tujuannya adalah untuk mempermudah penulisan klien dan komponen XMPP sederhana:
Perpustakaan dirancang untuk memiliki ketergantungan minimal. Saat ini memerlukan setidaknya Go 1.13.
Tidak disarankan untuk menonaktifkan pemeriksaan nama domain dan rantai sertifikat. Melakukan hal ini akan membuka klien Anda terhadap serangan man-in-the-middle.
Namun, dalam pengembangannya, server XMPP sering kali menggunakan sertifikat yang ditandatangani sendiri. Dalam situasi tersebut, lebih baik menambahkan root CA yang menandatangani sertifikat ke daftar root CA Anda yang tepercaya. Ini menghindari perubahan kode dan membatasi risiko pengiriman klien yang tidak aman ke produksi.
Oleh karena itu, jika Anda benar-benar ingin klien Anda memercayai sertifikat TLS apa pun, Anda dapat menyesuaikan tls.Config
standar Go dan menyetelnya di struct Config.
Berikut adalah contoh kode untuk mengonfigurasi klien agar mengizinkan koneksi ke server dengan sertifikat yang ditandatangani sendiri. Perhatikan opsi InsecureSkipVerify
. Saat menggunakan opsi tls.Config
ini, semua pemeriksaan pada sertifikat dilewati.
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
Bait XMPP adalah elemen XML dasar dan dapat diperluas. Stanza (atau terkadang bait khusus yang disebut 'nonzas') digunakan untuk memanfaatkan fitur protokol XMPP. Selama sesi, klien (atau komponen) dan server akan bertukar bait bolak-balik.
Pada tingkat rendah, bait adalah fragmen XML. Namun, pustaka Fluux XMPP menyediakan elemen penyusun untuk berinteraksi dengan stanza pada tingkat tinggi, menyediakan API yang ramah Go.
Subpaket stanza
menyediakan dukungan untuk penguraian aliran XMPP, penyusunan dan pembongkaran stanza XMPP. Ini adalah jembatan antara struktur Go tingkat tinggi dan protokol XMPP tingkat rendah.
Parsing, marshalling, dan unmarshalling secara otomatis ditangani oleh perpustakaan klien Fluux XMPP. Sebagai pengembang, biasanya Anda hanya akan memanipulasi struct tingkat tinggi yang disediakan oleh paket stanza.
Protokol XMPP, sesuai dengan namanya, dapat diperluas. Jika aplikasi Anda menggunakan ekstensi bait khusus, Anda dapat menerapkan ekstensi Anda sendiri secara langsung di aplikasi Anda.
Untuk mempelajari lebih lanjut tentang paket stanza, Anda dapat membaca lebih lanjut di dokumentasi paket stanza.
TODO
TODO
Kami memiliki beberapa contoh untuk membantu Anda mulai menggunakan perpustakaan Fluux XMPP.
Ini adalah klien demo "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 ())
}
Dokumentasi kode tersedia di GoDoc: gosrc.io/xmpp