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 프로토콜 기능을 활용하는 데 스탠자(때로는 'nonzas'라고 하는 특수 스탠자)가 사용됩니다. 세션 중에 클라이언트(또는 구성 요소)와 서버는 스탠자를 앞뒤로 교환합니다.
낮은 수준에서 스탠자는 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)에서 확인할 수 있습니다.