Fluux XMPP é uma biblioteca go xmpp , focada em simplicidade, automação simples e IoT.
O objetivo é simplificar a gravação de clientes e componentes XMPP simples:
A biblioteca foi projetada para ter dependências mínimas. Atualmente requer pelo menos Go 1.13.
Não é recomendado desabilitar a verificação de nome de domínio e cadeia de certificados. Fazer isso abriria seu cliente a ataques man-in-the-middle.
No entanto, no desenvolvimento, os servidores XMPP costumam usar certificados autoassinados. Nessa situação, é melhor adicionar a CA raiz que assinou o certificado à sua lista confiável de CA raiz. Evita alterar o código e limita o risco de enviar um cliente inseguro para produção.
Dito isso, se você realmente deseja permitir que seu cliente confie em qualquer certificado TLS, você pode personalizar o padrão Go tls.Config
e configurá-lo na estrutura Config.
Aqui está um exemplo de código para configurar um cliente para permitir a conexão a um servidor com certificado autoassinado. Observe a opção InsecureSkipVerify
. Ao usar esta opção tls.Config
, todas as verificações no certificado são ignoradas.
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
As sub-rotinas XMPP são elementos XML básicos e extensíveis. Estâncias (ou às vezes estrofes especiais chamadas 'nonzas') são usadas para aproveitar os recursos do protocolo XMPP. Durante uma sessão, um cliente (ou componente) e um servidor trocarão estrofes.
Em um nível inferior, as estrofes são fragmentos XML. No entanto, a biblioteca Fluux XMPP fornece os blocos de construção para interagir com estrofes em alto nível, fornecendo uma API amigável para Go.
O subpacote de stanza
fornece suporte para análise de fluxo XMPP, empacotamento e desempacotamento de sub-rotina XMPP. É uma ponte entre a estrutura Go de alto nível e o protocolo XMPP de baixo nível.
A análise, empacotamento e desempacotamento são tratados automaticamente pela biblioteca cliente Fluux XMPP. Como desenvolvedor, você geralmente manipulará apenas as estruturas de alto nível fornecidas pelo pacote de sub-rotinas.
O protocolo XMPP, como o nome indica, é extensível. Se seu aplicativo estiver usando extensões de sub-rotina customizadas, será possível implementar suas próprias extensões diretamente em seu próprio aplicativo.
Para saber mais sobre o pacote de sub-rotinas, você pode ler mais na documentação do pacote de sub-rotinas.
PENDÊNCIA
PENDÊNCIA
Temos vários exemplos para ajudá-lo a começar a usar a biblioteca Fluux XMPP.
Aqui está o cliente "echo" de demonstração:
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 ())
}
A documentação do código está disponível no GoDoc: gosrc.io/xmpp