Fluux XMPP es una biblioteca go xmpp que se centra en la simplicidad, la automatización simple y el IoT.
El objetivo es simplificar la escritura de clientes y componentes XMPP simples:
La biblioteca está diseñada para tener dependencias mínimas. Actualmente requiere al menos Go 1.13.
No se recomienda desactivar la verificación del nombre de dominio y la cadena de certificados. Hacerlo expondría a su cliente a ataques de intermediario.
Sin embargo, durante el desarrollo, los servidores XMPP suelen utilizar certificados autofirmados. En esa situación, es mejor agregar la CA raíz que firmó el certificado a su lista confiable de CA raíz. Evita cambiar el código y limita el riesgo de enviar un cliente inseguro a producción.
Dicho esto, si realmente desea permitir que su cliente confíe en cualquier certificado TLS, puede personalizar Go tls.Config
estándar y configurarlo en la estructura Config.
A continuación se muestra un código de ejemplo para configurar un cliente para permitir la conexión a un servidor con un certificado autofirmado. Tenga en cuenta la opción InsecureSkipVerify
. Cuando se utiliza esta opción tls.Config
, se omiten todas las comprobaciones del certificado.
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
Las estrofas XMPP son elementos XML básicos y extensibles. Las estrofas (o, a veces, estrofas especiales llamadas 'nonzas') se utilizan para aprovechar las características del protocolo XMPP. Durante una sesión, un cliente (o un componente) y un servidor intercambiarán estrofas de un lado a otro.
En un nivel bajo, las estrofas son fragmentos XML. Sin embargo, la biblioteca Fluux XMPP proporciona los componentes básicos para interactuar con estrofas en un alto nivel, proporcionando una API compatible con Go.
El subpaquete stanza
proporciona soporte para el análisis, clasificación y desorganización de flujos XMPP de estrofas XMPP. Es un puente entre la estructura Go de alto nivel y el protocolo XMPP de bajo nivel.
El análisis, la ordenación y la ordenación se manejan automáticamente mediante la biblioteca cliente Fluux XMPP. Como desarrollador, generalmente manipulará solo las estructuras de alto nivel proporcionadas por el paquete de stanza.
El protocolo XMPP, como su nombre indica, es extensible. Si su aplicación utiliza extensiones de estrofa personalizadas, puede implementar sus propias extensiones directamente en su propia aplicación.
Para obtener más información sobre el paquete de estrofas, puede leer más en la documentación del paquete de estrofas.
HACER
HACER
Tenemos varios ejemplos para ayudarle a comenzar a utilizar la biblioteca Fluux XMPP.
Aquí está el cliente "echo" de demostración:
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 ())
}
La documentación del código está disponible en GoDoc: gosrc.io/xmpp