Fluux XMPP هي مكتبة go xmpp ، تركز على البساطة والأتمتة البسيطة وإنترنت الأشياء.
الهدف هو تسهيل كتابة عملاء ومكونات XMPP البسيطة:
تم تصميم المكتبة بحيث تحتوي على الحد الأدنى من التبعيات. يتطلب حاليًا Go 1.13 على الأقل.
لا يوصى بتعطيل التحقق من اسم المجال وسلسلة الشهادات. سيؤدي القيام بذلك إلى تعريض عميلك لهجمات الوسيط.
ومع ذلك، أثناء التطوير، غالبًا ما تستخدم خوادم XMPP شهادات موقعة ذاتيًا. في هذه الحالة، من الأفضل إضافة المرجع المصدق الجذر الذي وقع الشهادة إلى قائمة المرجع المصدق الجذر الموثوق بها. فهو يتجنب تغيير التعليمات البرمجية ويحد من مخاطر إرسال عميل غير آمن إلى الإنتاج.
ومع ذلك، إذا كنت تريد حقًا السماح لعميلك بالثقة في أي شهادة TLS، فيمكنك تخصيص Go Standard tls.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 العناصر الأساسية للتفاعل مع المقاطع على مستوى عالٍ، مما يوفر واجهة برمجة تطبيقات سهلة الاستخدام.
توفر الحزمة الفرعية stanza
دعمًا لتحليل تدفق XMPP وتنظيمه وإلغاء تنظيم مقطع XMPP. إنه جسر بين بنية Go عالية المستوى وبروتوكول XMPP منخفض المستوى.
تتم معالجة التحليل والتنظيم وإلغاء التنظيم تلقائيًا بواسطة مكتبة عميل Fluux XMPP. باعتبارك مطورًا، ستتعامل عمومًا مع الهياكل عالية المستوى التي توفرها حزمة المقطع فقط.
بروتوكول XMPP، كما يوحي الاسم، قابل للتوسيع. إذا كان تطبيقك يستخدم امتدادات مقطعية مخصصة، فيمكنك تنفيذ الامتدادات الخاصة بك مباشرة في تطبيقك.
لمعرفة المزيد حول حزمة المقطع، يمكنك قراءة المزيد في وثائق حزمة المقطع.
المهام
المهام
لدينا العديد من الأمثلة لمساعدتك على البدء في استخدام مكتبة Fluux XMPP.
هنا هو عميل "الصدى" التجريبي:
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