Fluux XMPP — это библиотека go xmpp , ориентированная на простоту, простую автоматизацию и Интернет вещей.
Цель состоит в том, чтобы упростить написание простых клиентов и компонентов XMPP:
Библиотека спроектирована так, чтобы иметь минимальные зависимости. В настоящее время требуется как минимум Go 1.13.
Не рекомендуется отключать проверку доменного имени и цепочки сертификатов. Это откроет ваш клиент для атак «человек посередине».
Однако при разработке серверы XMPP часто используют самозаверяющие сертификаты. В этой ситуации лучше добавить корневой центр сертификации, подписавший сертификат, в список доверенных корневых центров сертификации. Это позволяет избежать изменения кода и ограничить риск отправки небезопасного клиента в рабочую среду.
Тем не менее, если вы действительно хотите, чтобы ваш клиент доверял любому сертификату 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. Во время сеанса клиент (или компонент) и сервер будут обмениваться строками взад и вперед.
На низком уровне строфы представляют собой фрагменты XML. Однако библиотека Fluux XMPP предоставляет строительные блоки для взаимодействия со разделами на высоком уровне, предоставляя удобный API.
Подпакет stanza
обеспечивает поддержку анализа потока XMPP, маршалинга и демаршалинга строф XMPP. Это мост между структурой Go высокого уровня и протоколом XMPP низкого уровня.
Анализ, маршалинг и демаршалинг автоматически выполняются клиентской библиотекой Fluux XMPP. Как разработчик, вы обычно будете манипулировать только структурами высокого уровня, предоставляемыми пакетом строф.
Протокол XMPP, как следует из названия, является расширяемым. Если ваше приложение использует собственные расширения разделов, вы можете реализовать свои собственные расширения непосредственно в своем приложении.
Чтобы узнать больше о пакете stanza, вы можете прочитать дополнительную информацию в документации пакета stanza.
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.