Fluux XMPP 是一個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 元素。節(或有時稱為“nonzas”的特殊節)用於利用 XMPP 協定功能。在會話期間,客戶端(或元件)和伺服器將來回交換節。
在低級別上,節是 XML 片段。然而,Fluux XMPP 庫提供了與高層互動的構建塊,提供了 Go 友好的 API。
stanza
子包提供對 XMPP 節的 XMPP 流解析、編組和解組的支援。它是高層 Go 結構和低層 XMPP 協定之間的橋樑。
解析、編組和反編組由 Fluux XMPP 用戶端庫自動處理。身為開發人員,您通常只會操作節包提供的高階結構。
XMPP 協議,顧名思義是可擴展的。如果您的應用程式使用自訂節擴展,您可以直接在自己的應用程式中實現您自己的擴展。
要了解有關 stanza 包的更多信息,您可以閱讀 stanza 包文檔中的更多內容。
待辦事項
待辦事項
我們有幾個範例來幫助您開始使用 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