في منشور مدونتي السابق ، Socket.io ، قدمت بإيجاز الاستخدام الأساسي لـ Socket.io وأنشأت عرضًا بسيطًا في غرفة الدردشة. بناءً على الفصل التمهيدي ، تستمر هذه المقالة في استكشاف الاستخدام المتقدم لـ Socket.io. ستبدأ هذه المقالة من التكوين والغرف والأحداث وما إلى ذلك ، وتقدم بعض واجهات برمجة التطبيقات والاحتياطات العملية في Socket.io.
1. التكوين
يوفر Socket.io 4 واجهات برمجة تطبيقات التكوين: io.configure ، io.set ، io.enable ، io.disable. تقوم io.set بتعيين العنصر المفرد ، ويتم استخدام io.enable و io.disable لتعيين التكوين المنطقي في عنصر واحد. يتيح لك IO.Configure تكوين معلمات مختلفة لبيئات الإنتاج المختلفة (مثل التطوير ، والاختبار ، وما إلى ذلك). يحدد ما يلي التكوينات المختلفة لـ Socket.io في بيئتين:
نسخة الكود كما يلي:
var io = require ('socket.io'). استمع (80) ؛
io.configure ('Development' ، function () {
io.enable ('Browser Client etag') ؛
io.set ('مستوى السجل' ، 1) ؛
}) ؛
io.configure ('الإصدار' ، الدالة () {
io.set ('Transports' ، ['WebSocket']) ؛
}) ؛
يسرد ما يلي بعض عناصر التكوين شائعة الاستخدام. لمعلمات التكوين المحددة ، يرجى الرجوع إلى الويكي الرسمي.
1 ). يدعم Socket.io مجموعة متنوعة من الطرق لتحقيق التواصل الفوري عبر الإنترنت ، مثل WebSocket ، و Colling ، وما إلى ذلك. يتيح لك هذا التكوين اختيار طريقة الاتصال الاحتياطية بنفسك.
2) مستوى .log (افتراضي 3): أدنى مستوى من إخراج السجل ، 0 هو خطأ ، 1 يتم تحذير ، 2 هو معلومات ، و 3 هو تصحيح ، وجميع أنواع السجلات يتم إخراجها افتراضيًا.
3). هارت بيت فاصل (افتراضي 25 ثانية): فاصل إرسال حزمة نبضات ، يحتاج العميل إلى إرسال حزمة نبضات القلب إلى الخادم خلال هذه الفترة الزمنية للحفاظ على الاتصال.
2. غرفة
الغرفة هي ميزة مفيدة للغاية توفرها Socket.io. الغرفة تعادل توفير مساحة اسم لبعض العملاء المحددين ، ولن تؤثر جميع عمليات البث والاتصالات في الغرفة على العملاء خارج الغرفة.
في المقدمة ، نعلم أنه يمكن استخدام Socket.join ("اسم الغرفة") لدخول الغرفة بواسطة العميل ، ويستخدم Socket.Leave ("اسم الغرفة") لمغادرة الغرفة. عندما يدخل العميل غرفة ، يمكن بث الرسالة في الغرفة بطريقتين:
نسخة الكود كما يلي:
// 1. بث حدث إلى غرفتي ، وسيتم استبعاد مقدم الطلب (أي أنه لن يتم استلام أي رسالة)
io.sockets.on ('connection' ، function (socket) {
// ملاحظة: بالمقارنة مع ما يلي ، إليك تقديم الأحداث من منظور العميل
socket.broadcast.to ('غرفتي'). emit ('event_name' ، data) ؛
}
// 2. بث حدث إلى غرفة أخرى ، وسيتلقى جميع العملاء في هذه الغرفة رسالة
// ملاحظة: بالمقارنة مع ما سبق ، إليك تقديم الأحداث من منظور الخادم
io.sockets.in ('غرفة أخرى'). emit ('event_name' ، data) ؛
// بث لجميع العملاء
io.sockets.emit ('event_name' ، data) ؛
بالإضافة إلى بث الرسائل إلى الغرفة ، يمكنك أيضًا الحصول على معلومات الغرفة من خلال واجهة برمجة التطبيقات التالية.
نسخة الكود كما يلي:
// احصل على معلومات حول جميع الغرف
// المفتاح هو اسم الغرفة ، القيمة هي صفيف معرف المقبس المقابل لاسم الغرفة
io.sockets.manager.rooms
// احصل على العميل في غرفة معينة وأرجع جميع مثيلات المقبس في هذه الغرفة
io.sockets.clients ("غرفة معينة")
// احصل على معلومات الغرفة التي أدخلتها هذا المقبس من خلال Socket.id
io.sockets.manager.roomclients [socket.id]
3. الأحداث
يحتوي Socket.io على بعض الأحداث الافتراضية المدمجة. عند تصميم الأحداث ، يجب أن نتجنب أسماء الأحداث الافتراضية واستخدام هذه الأحداث الافتراضية بمرونة.
أحداث من جانب الخادم:
1) .io.sockets.on ('connection' ، function (socket) {}): تم تشغيله بعد نجاح اتصال المقبس ، يستخدم للتهيئة
Socket.on ('message' ، function (message ، callback) {}): يتم تشغيل هذا الحدث عندما ينقل العميل رسالة عبر socket.send. الرسالة هي الرسالة المنقولة. رد الاتصال هو رد الاتصال ليتم تنفيذه بعد تلقي الرسالة.
2) .socket.on ("أي شيء" ، دالة (بيانات) {}): تم إطلاقه عند استلام أي حدث
3) .socket.on ('disconnect' ، function () {}): يطلق عندما يفقد المقبس الاتصال (بما في ذلك أي حالات فصل مثل إغلاق المتصفح ، والانفصال بنشاط ، والانفصال ، وما إلى ذلك)
أحداث العميل:
1) .connect: الاتصال ناجح
2). الاتصال: الاتصال
3) .DISCONNECT: فصل
4) .connect_failed: فشل الاتصال
5) .error: حدث خطأ ولا يمكن معالجته بواسطة أنواع الأحداث الأخرى.
6) .Message: حدث رسالة من جانب الخادم نفسه
7). أي شيء: أي حدث على نفس الخادم
8) .RECONNECT_FAILED: فشل إعادة الاتصال
9) .RECONNECT: إعادة الاتصال بنجاح
10). الربط: إعادة الاتصال
هنا نحتاج إلى ذكر الطلب عندما يبدأ مقبس العميل الاتصال. عند توصيل الاتصال الأول ، يكون ترتيب تشغيل الحدث هو: Connect-> Connect ؛ عند فقدان الاتصال ، يكون ترتيب تشغيل الحدث هو: disconnect-> إعادة الاتصال (يمكن تنفيذها عدة مرات)-> connecting-> Reconnect-> connect-> connect.
4. التفويض
1). بث إلى جميع العملاء: socket.broadcast.emit ('رسالة البث') ؛
2). أدخل غرفة (سهلة الاستخدام للغاية! إنها تعادل مساحة الاسم ، والتي يمكن بثها إلى غرفة معينة دون التأثير على العملاء في غرف أخرى أو لا في الغرفة): Socket.oin ("اسم غرفتك") ؛
3). رسالة البث إلى غرفة (لا يمكن للمرسل استلام الرسالة): socket.broadcast.to ('اسم غرفتك'). EMIT ('Broadcast Room Message') ؛
4). رسائل البث إلى غرفة (بما في ذلك المرسل يمكنه تلقي الرسائل) (ينتمي واجهة برمجة التطبيقات هذه إلى io.sockets): io.sockets.in ("اسم غرفة آخر"). EMIT ("رسالة غرفة البث") ؛
5). Force Websocket Communication: (Client) Socket.send ('hi') ، (server) استخدم socket.on ('message' ، function (data) {}) لتلقيه.
هذا هو في الأساس مقدمة للاستخدام المتقدم من socket.io. أنا شخصياً أشعر أن واجهات برمجة التطبيقات الأساسية هذه كافية في الاستخدام اليومي ، والتي تعكس أيضًا فلسفة التصميم البسيطة للغاية والسهلة الاستخدام. هذه المقالة هي مجرد وسيلة لجذب الانتباه. عند مواجهة المشكلات التي لا يمكن حلها في الاستخدام الفعلي ، سيكون من الأفضل التحقق من الويكي المفصل الرسمي.