سؤال

لدي برنامج عميل/خادم كلاسيكي (العميل وقاعدة البيانات) مكتوب في دلفي 2006.عند استيفاء شروط معينة لدى العميل، أحتاج إلى إخطار جميع العملاء الآخرين بسرعة كبيرة.حتى الآن تم القيام بذلك باستخدام عمليات بث UDP، لكن هذا لم يعد قابلاً للتطبيق حيث يتصل العملاء الآن من خارج الشبكة المحلية ويقتصر بث UDP على الشبكة المحلية.

أنا على دراية بمكتبات Indy ولكني لست متأكدًا حقًا من المكونات التي يجب استخدامها وكيفية تنظيمها.أعتقد أنني سأحتاج إلى خادم يتصل به العملاء والذي سيتلقى الرسائل ويوزعها...؟هل هناك أي عينات لتساعدني في البدء؟

هل هناك أي مجموعات مكونات أو تقنيات أخرى يجب أن أنظر إليها بدلاً من ذلك/أيضًا؟

هل كانت مفيدة؟

المحلول

الجواب البسيط هو أن البروتوكولات القياسية المتوفرة في دلفي (والأدوات الأخرى) لا تسمح بالإخطار العكسي.لقد بحثت في هذا لمشروع أردت فيه استخدام SOAP.يفترضون جميعًا أن العميل يسأل الخادم، ويستجيب الخادم وهذا كل شيء.

بالنسبة لي، كان الحل هو RemObjects SDK.يتيح لك هذا إرسال إشعارات إلى العملاء، ويمكن أن يحتوي الإشعار على أي بيانات تريدها (تمامًا مثل العميل إلى الخادم).أنا شخصياً أستخدم اتصال SuperTCP، لكنه يعمل مع الآخرين أيضًا.لا يزال بإمكانه تقديم واجهة SOAP للعملاء الذين يجب عليهم استخدامها، ولكن عندما يكون لديك سيطرة على كل من العميل والخادم، فهي تعمل بشكل جيد للغاية.

نصائح أخرى

هناك عدة طرق سهلة حقًا للقيام بذلك باستخدام دلفي، على الرغم من أنني متأكد من أن RemObjects SDK يعمل جيدًا أيضًا.

  1. لديك خادم مركزي يحتوي على * TIdTCPServer يستمع * عليه.ثم كل عميل لديه TIdTCPClient عليه.يتصلون بالخادم و كتلة على القراءة منتظر ل الخادم للكتابة.بمجرد أن يتلقى الخادم إشعارًا عبر مقبس الاستماع إليه البث لكل من العملاء المنتظرين.يعد هذا إخطارًا فوريًا إلى حد كبير لجميع العملاء.
  2. لديك خادم مركزي يحتوي على TIdTCCPerver يستمعز عليه.ثم كل عميل لديه TIdTCPClient عليه.يمكن لهؤلاء العملاء "بينغ" الخادم لطلب التحديثات على فترات منتظمة (استخدم رمز الجلسة للحفاظ على الحالة).يحدد تكرار الفاصل الزمني مدى سرعة الإشعار.عندما يحتاج أحد العملاء إلى إخطار الآخرين، فإنه يقوم فقط بإخطار الخادم.ثم يستخدم الخادم ملف قائمة انتظار الرسائل لإنشاء قائمة بجميع جلسات العميل النشطة وإضافة إشعار لكل منها.ثم في المرة التالية التي يتصل فيها كل عميل، فإنه يعطيه الإشعار ويزيله من قائمة الانتظار.
  3. الحفاظ على أ طاولة الجلسة في قاعدة البيانات حيث يقوم كل عميل بالتحديث بانتظام بأن لديه جلسة نشطة، ويزيل نفسه عند قطع الاتصال.سوف تحتاج إلى عملية صيانة تزيل الجلسات الميتة.ثم لديك جدول انتظار الرسائل يمكن للعميل كتابة تحديث له بصف واحد لكل جلسة نشطة حالية.بعد ذلك، يمكن للعملاء الآخرين اختبار اتصال هذا الجدول بانتظام لمعرفة ما إذا كانت هناك أية إشعارات معلقة لجلسته، وإذا كانت هناك، فيمكنه قراءتها والتصرف بناءً عليها ثم إزالتها.
  4. نوعا من الند للند كان النهج هو أن العملاء على علم ببعضهم البعض من خلال المعلومات الموجودة في قاعدة البيانات ثم يتصلون مباشرة ببعضهم البعض ويقومون بإخطار أو طلب الإشعارات (اعتمادًا على تكوينات جدار الحماية وNAT).أكثر تعقيدًا بعض الشيء، لكنه ممكن.

من الواضح أن اختيار التنفيذ سيعتمد على الإعداد والاحتياجات الخاصة بك.سيكون الضبط ضروريًا لتحقيق أفضل النتائج.

المكونات التي تحتاجها لهذا هي تيدتكبسيرفير (المستمع) و TIdTCPClient (مرسل).وكلاهما موجود في مكتبات إندي في دلفي.

مكونات ICS من http://www.overbyte.be عظيم.أ) توافق أفضل من إندي ب.) أمثلة ودعم جيدة لبطاقة البريدية.استخدم TClientSocket و TServerSocket

يستخدم مشروع FirebirdSQL مفهوم الإشعارات باعتبارها اتصالات بين الخادم والعميل والتي ترسل سلسلة إلى العميل.ولهذا يستخدم خادم قاعدة البيانات منفذًا آخر.ويطلب من العميل التسجيل، ومن المثير للاهتمام تلقي نوع معين من الإشعارات من خلال استدعاء API.

يمكنك استخدام نفس الفكرة.

يجب أن يناسب RabbitMQ فاتورتك.الخادم مجاني وجاهز للاستخدام.كل ما تحتاجه هو جانب العميل للاتصال ودفع/إرسال الرسالة والحصول على/سحب رسالة الإخطار

الخادم: http://www.rabbitmq.com/download.htmlقم بعمل جوجل للعميل أو قم بتنفيذه بنفسك

هتافات

يجب أن تكون قادرًا على استخدام Multicast UDP لنفس الغرض.سيكون الاختلاف الوحيد هو الانضمام إلى مجموعة البث المتعدد من كل عميل.

http://en.wikipedia.org/wiki/IP_Multicast

http://en.wikipedia.org/wiki/Internet_Group_Management_Protocol

يحرر: فقط للتوضيح، يتيح لك البث المتعدد الانضمام إلى "مجموعة" معينة مرتبطة بعنوان IP للبث المتعدد.أي حزمة يتم إرسالها إلى هذا العنوان ستصل إلى كل عميل انضم إلى المجموعة

يمكنك مشاهدة مكون weonlydo wodVPN الذي يسمح لك بإنشاء ثقب UDP قوي والحصول على إعادة توجيه المنفذ أو VPN عادي (مع محول شبكة مُصمم) حتى تتمكن من توصيل جهازي كمبيوتر خلف NAT.

أنا أستخدم عنصر التحكم هذا لبرنامج الاتصال الخاص بنا ويعمل بشكل جيد جدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top