Fluux XMPP ist eine go xmpp Bibliothek, die sich auf Einfachheit, einfache Automatisierung und IoT konzentriert.
Das Ziel besteht darin, das Schreiben einfacher XMPP-Clients und -Komponenten zu vereinfachen:
Die Bibliothek ist so konzipiert, dass sie minimale Abhängigkeiten aufweist. Derzeit ist mindestens Go 1.13 erforderlich.
Es wird nicht empfohlen, die Prüfung für Domänennamen und Zertifikatskette zu deaktivieren. Dies würde Ihren Client anfällig für Man-in-the-Middle-Angriffe machen.
In der Entwicklung verwenden XMPP-Server jedoch häufig selbstsignierte Zertifikate. In diesem Fall ist es besser, die Stammzertifizierungsstelle, die das Zertifikat signiert hat, zu Ihrer Liste der vertrauenswürdigen Stammzertifizierungsstellen hinzuzufügen. Es vermeidet Codeänderungen und begrenzt das Risiko, einen unsicheren Client in die Produktion zu schicken.
Wenn Sie Ihrem Client jedoch wirklich erlauben möchten, jedem TLS-Zertifikat zu vertrauen, können Sie Go standard tls.Config
anpassen und in der Config-Struktur festlegen.
Hier ist ein Beispielcode zum Konfigurieren eines Clients, um eine Verbindung zu einem Server mit selbstsigniertem Zertifikat zu ermöglichen. Beachten Sie die Option InsecureSkipVerify
. Bei Verwendung dieser tls.Config
Option werden alle Prüfungen des Zertifikats übersprungen.
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
XMPP-Strophen sind grundlegende und erweiterbare XML-Elemente. Strophen (manchmal auch spezielle Strophen namens „Nonzas“) werden verwendet, um die Funktionen des XMPP-Protokolls zu nutzen. Während einer Sitzung tauschen ein Client (oder eine Komponente) und ein Server Strophen hin und her.
Auf einer niedrigen Ebene sind Strophen XML-Fragmente. Die Fluux XMPP-Bibliothek stellt jedoch die Bausteine für die Interaktion mit Strophen auf hoher Ebene bereit und stellt eine Go-freundliche API bereit.
Das stanza
Unterpaket bietet Unterstützung für das XMPP-Stream-Parsing, das Marshalling und das Unmarshalling von XMPP-Strophen. Es ist eine Brücke zwischen der Go-Struktur auf hoher Ebene und dem XMPP-Protokoll auf niedriger Ebene.
Das Parsen, Marshalling und Unmarshalling wird automatisch von der Fluux XMPP-Clientbibliothek durchgeführt. Als Entwickler bearbeiten Sie im Allgemeinen nur die vom Stanza-Paket bereitgestellten High-Level-Strukturen.
Das XMPP-Protokoll ist, wie der Name schon sagt, erweiterbar. Wenn Ihre Anwendung benutzerdefinierte Zeilengruppenerweiterungen verwendet, können Sie Ihre eigenen Erweiterungen direkt in Ihrer eigenen Anwendung implementieren.
Weitere Informationen zum Zeilengruppenpaket finden Sie in der Dokumentation zum Zeilengruppenpaket.
TODO
TODO
Wir haben mehrere Beispiele, die Ihnen den Einstieg in die Verwendung der Fluux XMPP-Bibliothek erleichtern sollen.
Hier ist der Demo-Client „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 ())
}
Die Codedokumentation ist auf GoDoc verfügbar: gosrc.io/xmpp