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