أسرع الاتصالات ممكنة.
هذا هو الإصدار 7.2 من حزمة Netcom. في هذا الإصدار ، أصبحت حزمة Netcom الآن متعددة المنصات! يمكنك تجميع تطبيقاتك تحت جميع الأنظمة الأساسية في Firemonkey!
هذه المجموعة من المكونات هي أسرع تنفيذ ممكنة لاتصالات المقبس ، بأي لغة ؛ هذا رمز محسن للغاية على مآخذ TCP/IP. ننسى استخدام مؤشر ترابط لكل اتصال: مع هذا الجناح ، يمكنك الحصول على أكبر عدد من الاتصالات المتزامنة مع الخادم الخاص بك كما تريد. يتم استخدام المواضيع لكل طلب وليس لكل اتصال ، ويتم الحفاظ عليها في فئة تجمع الخيوط السريعة للغاية.
يبدأ التنفيذ بـ TNCTCPServer و TNCTCPClient الذي ينفذ اتصالات المقبس الأساسية. يمكنك استخدام TNCTCPCLIENT و TNCTCPSERVER إذا كان كل ما تريده هو تنفيذ comms المقبس القياسي (ولكن سريع للغاية).
علاوة على مآخذ TCP/IP ، يتم تنفيذ بروتوكول خفيف الوزن ليكون قادرًا على حزم وتفريغ المخازن المؤقتة (يتدفق TCP/IP البسيط وليس له أي فكرة عن المخزن المؤقت المحدد جيدًا). مجموعة المكونات التي تنفذ هذه الوظيفة هي tncserversource و tncclientsource. يقوم كل من هذين المكونين بتنفيذ execcommand (ACMD ، ADATA) الذي يؤدي إلى حدث onhandlecommand على الجانب الآخر (يمكن للعميل execcommand إلى خادم ، أو يمكن لخادم التنفيذ إلى أي عميل). يمكن أن يكون ExecCommand حظرًا أو عدم الحظر (ASYNC) اعتمادًا على كيفية تعيين معلمة AREQUIRERSELT. إذا كنت تستخدم سلوك الحظر ، فلا يزال المكون يتعامل مع الطلبات الواردة من نظيرته. على سبيل المثال ، يمكن أن ينتظر عملاء العملاء على خادم execcommand ، ولكن أثناء الانتظار ، يمكن أن يخدم طلبات execcommand من الخادم!
Senario بسيط: الخادم:
- You put a TncServerSource on your form.
If you want you can change the port it is listening to via the
Port property.
- You implement an OnHandleCommand event handler and,
depending on aCmd parameter (integer), you respond the result of
the command via setting the Result of the OnHandleCommand to
anything you like (TBytes). If an exception is raised while in
HandleCommand, it is trapped, packed, transfered accross to the
calling peer, and raised at the peer's issued ExecCommand.
This way exceptions can be handled as if they were raised locally.
- You set the Active property to true. Your server is ready.
عميل:
- You put a TncClientSource on your form.
You can set Host and Port to whatever you want.
- You set Active property to true.
Your client is now connected to the server.
- You call ExecCommand (on your TncClientSource), with any
command number and data that you like. This will send your
command and data over to the server, call its OnHandleCommand,
pack the response, and return it as a result to your ExecCommand.
- ExecCommand is blocking (if aRequiresResult parameter is set to true),
but only for the current command issued.
The TncClientSource's OnHandleCommand still executes, so,
while waiting for a command to return, your client socket may be
processing requests from your server (a server can also
ExecCommand to a client).
- If you have forgotten to set Active to true and call ExecCommand,
the TncClientSource will first try to connect, so you can ommit
setting this property. It will also try to connect if it knows
it has been disconnected (and the Reconnect property is set to true).
تعد هذه المجموعة من المكونات سرعة لا تضاهى وهذا ليس فقط بالكلمات:
يمنح اختبار التوقيت البسيط مع عرض Netcomvsindy النتائج التالية:
بدءًا من الوحدة الأساسية ، ncsockets.pas ، سترى أن التنفيذ لا يعاني من رمز الركود ، فهو فوري إلى حد ما. تم استخدام اتفاقية الاتصال المضمنة حيثما كان من المناسب. تم اختبار الوظائف الأساسية للغاية وتحسينها من خلال مراقبة الأداء من خلال توقيت الحلقات الكبيرة وفحص التجميع للضغط على كل جزء آخر من الأداء.
الفرق الأكبر على الرغم من زيادة السرعة يرجع إلى الهندسة المعمارية. على عكس معظم المقابس النموذجية:
هذه المجموعة من المقابس لا تفرخ ولا تستخدم خيط لكل اتصال.
هذا يعني أنه يمكنك الحصول على العديد من الاتصالات الحية كما تريد ولن ترى أي فرق في الأداء! تجمع الخيوط ينتظر أي طلبات ؛ إذا كان من المقرر إنشاء مؤشر ترابط لكل طلب أو لكل اتصال ، فإن السرعة ستعاني كثيرًا ، حيث أن إنشاء مؤشر ترابط هو الوقت الثقيل. إذا كان لا يمكن التعامل مع عدد الطلبات في الثانية من قبل تجمع مؤشرات الترابط ، فإن تجمع مؤشرات الترابط ينمو بحد أقصى محدد ، وإذا كان لا يزال لا يمكن التغلب عليه ، فإن العميل ينتظر حتى يحصل الخادم على مؤشر ترابط جاهز لمعالجة طلبه.
وقد تم إيلاء اهتمام خاص لقضايا الاتصال أيضا. على سبيل المثال ، يتم التقاط قطع الاتصال على الفور ، وإذا كان الخط سيئًا للغاية لدرجة أنه لا يمكن التقاط الاتصال ، فإنه يعالج هذا من خلال حزمة Keep Alive التي تعرف من خلالها الحالة الفعلية. هناك خاصية Reconnect وخاصية keepalive. عندما يتم فصل العميل ، لأي سبب من الأسباب ، فإنه يحاول إعادة الاتصال بشفافية ودون التأثير على أداء التطبيق الرئيسي. وبهذه الطريقة لا داعي للقلق بشأن إبقاء عملائك متصلين.
يعد الضغط والتشفير معيارًا أيضًا مع هذه المكونات التي لا تتطلب أي مكتبات إضافية مطلوبة. Ofcourse يمكنك استخدام ضغطك أو تشفيرك إذا كنت تفضل ذلك ، ولكن من المفيد إلى حد ما أن يكون لديك خاصية يمكنك تعيينها على المكون.
يمكن أن تتعامل هذه المجموعة من المكونات أيضًا مع بيانات القمامة التي تم إلقاؤها عليها ، وقد تم استخدامها واختبارها في مشاريع ضخمة على مستوى البلد حيث يمكن رؤية جميع أنواع الهجمات.
الجهد المبذول الذي يتعين على المبرمج القيام به لاستخدام هذه المكونات هو الحد الأدنى مقارنة بالأطر الأخرى. يرجى الرجوع إلى العروض التوضيحية لفهم أفضل حول كيفية استخدام هذه المكونات.
كتبه بيل أناستاسيوس العروض التوضيحية. شكر خاص لدانييل ماوريك ، تومي برامي ، رولاند بنغتسون على الاختبارات والاقتراحات الواسعة. شكراً جزيلاً!
vasdemos [at] Yahoo [dot] co [dot] uk
** قواعد دلفي **