Fluux XMPP เป็นไลบรารี go xmpp ที่เน้นความเรียบง่าย ระบบอัตโนมัติที่เรียบง่าย และ IoT
เป้าหมายคือทำให้ง่ายต่อการเขียนไคลเอ็นต์และส่วนประกอบ XMPP แบบง่าย:
ไลบรารีได้รับการออกแบบให้มีการอ้างอิงน้อยที่สุด ปัจจุบันต้องใช้ Go 1.13 เป็นอย่างน้อย
ไม่แนะนำให้ปิดการใช้งานการตรวจสอบชื่อโดเมนและห่วงโซ่ใบรับรอง การทำเช่นนี้จะเปิดไคลเอ็นต์ของคุณให้รับการโจมตีแบบแทรกกลาง
อย่างไรก็ตาม ในการพัฒนา เซิร์ฟเวอร์ XMPP มักใช้ใบรับรองที่ลงนามด้วยตนเอง ในสถานการณ์ดังกล่าว จะเป็นการดีกว่าถ้าเพิ่ม CA หลักที่ลงนามใบรับรองลงในรายการ Root CA ที่เชื่อถือได้ของคุณ หลีกเลี่ยงการเปลี่ยนรหัสและจำกัดความเสี่ยงในการจัดส่งลูกค้าที่ไม่ปลอดภัยไปยังการผลิต
ดังที่กล่าวไว้ หากคุณต้องการอนุญาตให้ไคลเอ็นต์ของคุณเชื่อถือใบรับรอง TLS ใดๆ จริงๆ คุณสามารถปรับแต่งมาตรฐาน Go tls.Config
และตั้งค่าใน Config struct ได้
ต่อไปนี้คือโค้ดตัวอย่างในการกำหนดค่าไคลเอ็นต์เพื่ออนุญาตการเชื่อมต่อกับเซิร์ฟเวอร์ด้วยใบรับรองที่ลงนามด้วยตนเอง สังเกตตัวเลือก InsecureSkipVerify
เมื่อใช้ตัวเลือก tls.Config
นี้ การตรวจสอบใบรับรองทั้งหมดจะถูกข้ามไป
config := xmpp. Config {
Address : "localhost:5222" ,
Jid : "test@localhost" ,
Credential : xmpp . Password ( "Test" ),
TLSConfig : tls. Config { InsecureSkipVerify : true },
}
บทที่ XMPP เป็นองค์ประกอบ XML พื้นฐานและขยายได้ Stanzas (หรือบางครั้งบทพิเศษที่เรียกว่า 'nonzas') ใช้เพื่อใช้ประโยชน์จากคุณสมบัติโปรโตคอล XMPP ในระหว่างเซสชัน ไคลเอนต์ (หรือส่วนประกอบ) และเซิร์ฟเวอร์จะแลกเปลี่ยนบทไปมา
ในระดับต่ำ stanza คือแฟรกเมนต์ XML อย่างไรก็ตาม ไลบรารี Fluux XMPP จัดเตรียมองค์ประกอบพื้นฐานสำหรับการโต้ตอบกับบทในระดับสูง โดยมี API ที่เป็นมิตรกับสิ่งแวดล้อม
แพ็กเกจย่อย stanza
ให้การสนับสนุนการแยกวิเคราะห์สตรีม XMPP การจัดเรียง และการยกเลิกการจัดเรียงของ XMPP stanza เป็นสะพานเชื่อมระหว่างโครงสร้าง Go ระดับสูงและโปรโตคอล XMPP ระดับต่ำ
การแยกวิเคราะห์ การจัดลำดับ และการยกเลิกการจัดลำดับจะได้รับการจัดการโดยอัตโนมัติโดยไลบรารีไคลเอ็นต์ Fluux XMPP ในฐานะนักพัฒนา โดยทั่วไปคุณจะจัดการเฉพาะโครงสร้างระดับสูงที่จัดเตรียมโดยแพ็คเกจ stanza เท่านั้น
โปรโตคอล XMPP ตามชื่อหมายถึงสามารถขยายได้ หากแอปพลิเคชันของคุณใช้ส่วนขยาย stanza แบบกำหนดเอง คุณสามารถใช้งานส่วนขยายของคุณเองได้โดยตรงในแอปพลิเคชันของคุณเอง
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับแพ็กเกจ 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