مشاركة منطقة ذاكرة مشتركة في دلفي بين أجهزة الكمبيوتر

StackOverflow https://stackoverflow.com/questions/3840227

سؤال

لدي تطبيق Delphi 2006 الذي يجمع البيانات ويعرضها كملخص للعديد من القنوات ، قناة واحدة لكل صف على tdrawgrid. لدي نفس التطبيق الذي يعمل على مختلف أجهزة الكمبيوتر الأخرى على الشبكة ، ولكن هذه أجهزة الكمبيوتر الأخرى هي عبيد - فهي لا تجمع البيانات ولكنها توفر مجرد عرض عن بُعد للملخص.

في الوقت الحاضر ، يعرض العبيد مجرد تقليد من شاشة العرض الموجزة على السيد ، ويتم تنفيذ ذلك عبر عمليات البث عن طريق ممرات البريد من السيد.

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

هل يمكنني استخدام بعض مخطط الذاكرة المشتركة لوضع البيانات لأسفل إلى ملف تم تعيينه للذاكرة حيث يمكن للعبيد الوصول من أي مكان (عبر الويب ، حتى)؟ نحن نتحدث عن حجم ذاكرة يبلغ 100 ألف بايت كحد أقصى ، على سبيل المثال ، تم تحديثه من قبل السيد مرة واحدة في الثانية الواحدة ، وربما في موضوع ، للحفاظ على استجابة المهمة الأمامية الرئيسية.

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

المحلول

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

يحتوي استخدام ملف بسيط على ميزة أنه لا يتطلب أي برنامج إضافي (مثل خادم Daetabase أو بعض البرامج الوسيطة) بعد مبدأ KISS. ولكن بالطبع هو أبعد ما يكون عن مثير ؛-) ولا يستخدم تقنية الكلمات الطنانة الصحيحة.

نصائح أخرى

لن تعمل الذاكرة المشتركة عبر الويب (ما لم تقم بتشغيل VPN) ولا تعمل بشكل جيد على الشبكة بشكل عام (يمكن أن تكون طرق العرض غير متزامنة ولا يمكنك مزامنتها عبر الشبكة).

أستطيع أن أرى عدة حلول لمهمتك:

الخيار 1. استخدم البرامج الوسيطة الموجهة للرسالة (MOM) ، مثل MSMQ و KBMMW و MSGConnect لدينا لإخطارات البث التي تتضمن فقط التغييرات في بياناتك. وبهذه الطريقة ، لن يحتاج العملاء إلى استطلاع الخادم بالإضافة إلى ذلك للحصول على لقطة البيانات. تستخدم جميع حلول MOM اتصالات TCP للعمليات وهذا أكثر موثوقية من Mailslots.

الخيار 2. استخدم بعض DBMs لخادم العميل ، وربما يكون ذلك الذي يدعم الإخطارات للعملاء (لست خبيرًا في DMBs لذلك لا يمكنني إخبارك بالأسماء).

يمكنك استخدام قاعدة بيانات مثل DBISAM و Firebird و ETC .. مع DBISAM ، لقد استخدمت خدعة من قراءة 8 بايت من ملف قاعدة البيانات الذي يبدو أنه رأس. إذا تغيرت ، فأنا أعلم أن البيانات الموجودة في الجدول قد تغيرت ، وإلا لم تكن كذلك. يمكنك الاستفادة من ذلك في العميل إذا كنت تستخدم حلقة الاقتراع ، أو إذا كنت ترغب في متابعة استخدام Mailslots كطريقة للإخطار. أي استطلاع الملف كل 10 ثوانٍ أو عند إشعار MailSlot ، أيهما يأتي أولاً.

ما الخطأ في استخدام TCP/IP؟ يمكنك استخدام إندي (السفن مع دلفي بالفعل) أو ICS لجعل تطبيقك الرئيسي (الرئيسي) يستجيب لطلبات IP (على سبيل المثال ، HTTP أو ICMP أو أي شيء يناسب احتياجاتك للبيانات) مع مؤشر ترابط أو اثنين ، واحصل على تطبيقات "العبيد" فقط طلب البيانات عبر عنوان IP الخاص سيد على منفذ معين. هذا من شأنه أن يعمل على إنترانت أو عبر الإنترنت بشفافية.

نستخدم MSMQ لشيء مماثل.

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