Grappler هو خادم بسيط للاتصالات "المذنب" الذي يعرض واجهة برمجة تطبيقات واحدة ومتسقة عبر جميع وسائل النقل. يدعم Grappler حاليًا وسائل النقل التالية (كل منها يحتوي على قائمة بالمتصفحات المدعومة المعروفة حاليًا):
* - تحتوي تطبيقات XMLHttpRequest في بعض المتصفحات على مراوغات غير متوقعة (مثل متصفح الويب المدمج لنظام Android 1.6)
يقوم Grappler بتصدير كائن رئيسي واحد: Server
.
يقوم lib/common.js بتصدير كائنات LOG
و STATE
، والتي تحتوي على ثوابت تستخدم عند تسجيل الرسائل والتحقق من حالة العميل على التوالي.
كائن LOG
هو:
{
INFO: 1,
WARN: 2,
ERROR: 3
}
كائن STATE
هو:
{
ACCEPTED: 1, // internal use only
TEMP: 2, // internal use only
PROTO_HTTP: 4, // client is HTTP-based
PROTO_WEBSOCKET: 8 // client is WebSocket-based
}
إنشاء مثيل جديد لخادم Grappler.
options
هي كائن بالقيم الافتراضية التالية:
{
// A callback for receiving "debug" information. It is called with two arguments: message and message level.
// Message level is one of the values in the `LOG` object.
logger: function(msg, msgLevel) {},
// A string or array of strings which denote who is allowed to connect to this grappler Server instance.
// The format of the string is: "hostname:port", "hostname", or an asterisk substituted for either the hostname
// or port, or both, to act as a wildcard.
origins: "*:*",
// An integer value in milliseconds representing the interval in which a ping is sent to an HTTP client for those
// transports that need to do so.
pingInterval: 3000,
// A storage provider used to store client objects. The default is to use 'object', a simple hash. Other available
// storage providers can be found in lib/storage. The value here is the name without the 'storage' prefix and file extension.
storage: 'object'
}
fnHandleNormalHTTP
عبارة عن رد اتصال قادر على تجاوز أداة Grappler لاتصال HTTP وارد. إذا لم يتم إرسال أي رؤوس، فسيتولى Grappler التحكم في الاتصال. الوسيطات المتوفرة لرد الاتصال هذا هي نفسها بالنسبة لحدث request
http.Server
، أي: كائنات http.ServerRequest وhttp.ServerResponse. تجدر الإشارة إلى أنه إذا كنت تريد أن يتعامل Grappler مع جميع اتصالات HTTP الواردة تلقائيًا ولكنك تريد تحديد رد اتصال لـ fnAcceptClient
، فستحتاج إلى تحديد قيمة false
لـ fnHandleNormalHTTP
.
fnAcceptClient
هو رد اتصال يتم تنفيذه لحظة اتصال العميل. الغرض الرئيسي من رد الاتصال هذا هو إتاحة الفرصة لمنع العميل فورًا من الوصول إلى خادم Grappler. على سبيل المثال، قد يحتفظ تطبيقك بقائمة سوداء أو قد يقوم تلقائيًا بإدراج عنوان IP معين في القائمة السوداء/تقييده بعد اتصالات x في فترة زمنية معينة. إذا أعاد رد الاتصال هذا false
، فسيتم قطع الاتصال تلقائيًا، وإلا فسيتم السماح بالاتصال. يتلقى رد الاتصال وسيطة واحدة، وهي كائن net.Stream
الذي يمثل الاتصال.
function(client) { }
يتم إطلاق هذا الحدث في كل مرة يتصل فيها عميل جديد بالنظام بنجاح. client
هو مثيل لـ HttpClient
.
function(err) { }
ينبعث عند حدوث خطأ غير متوقع.
يبدأ الخادم بالاستماع على port
host
المحددين. إذا تم حذف host
، فسوف يستمع الخادم إلى أي عنوان IP.
يرسل data
إلى كل عميل متصل باستخدام encoding
اختياري.
يقوم بإيقاف تشغيل الخادم من خلال التوقف عن الاستماع للاتصالات الواردة وقطع أي اتصالات عميل موجودة.
هناك كائن مهم آخر يُستخدم في Grappler، وهو كائن HttpClient
. يمثل HttpClient
مستخدمًا متصلاً بالخادم ويمكن استخدامه للتفاعل مع هذا المستخدم.
function() { }
ينبعث عندما يصبح المخزن المؤقت للكتابة الخاص بالعميل فارغًا.
function() { }
تنبعث عند قطع اتصال العميل.
حقل بت يحتوي على الحالة الحالية للعميل. راجع كائن STATE
المذكور مسبقًا لمعرفة البتات الصالحة.
عنوان IP الخاص بالعميل.
يرسل data
باستخدام encoding
اختياري إلى العميل. ترجع هذه الوظيفة true
إذا تم مسح البيانات بأكملها بنجاح إلى المخزن المؤقت للنواة. وإلا، فسيتم إرجاع false
إذا تم وضع كل البيانات أو جزء منها في قائمة الانتظار في ذاكرة المستخدم. سيتم انبعاث drain
عندما يصبح المخزن المؤقت للنواة مجانيًا مرة أخرى.
يرسل data
إلى كافة العملاء المتصلين الآخرين باستخدام encoding
اختياري.
قطع اتصال العميل بالخادم بالقوة.