الشبكة العربية لمطوري الألعاب

خبير مدير وسام البهنسي مشاركة 1

السلام عليكم،
 
ما هي أكثر الطرق سرعة وفاعلية لتخاطب برنامجين منفصلين يعملان تحت نظام ويندوز؟
 
لدي البرنامج الأول يقوم ببعض الحسابات، والبرنامج الثاني مستقل وعندما يعمل فإنه يرسل طلبات للبرنامج الأول كي يعطيه النتائج، والتي يعالجها البرنامج الثاني ثم يعيدها للبرنامج الأول وهكذا... أي حوار كامل بكلا الاتجاهين... فما هي الوسيلة الأسرع والأكثر فاعلية تحت نظام ويندوز لتحقيق هذا الهدف؟
 
أنا حالياً أستخدم ذاكرة مشتركة عن طريق ما يدعى بالـ File Mapping في ويندوز، والذي يتيح لك إنشاء "ملف" مشترك بين برنامجين يستطيعان تبادل المعلومات من خلاله. الملف وهمي ويقوم بكتابة المعلومات في الـ Paging File الخاص بويندوز. فهل هناك طريقة أفضل؟
 
وشكراً

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

خبير مشرف مؤيد مارديني مشاركة 2

استعمال الخدمات التي يقدمها WCF يبدو مثالياً، ولكن هل تستعمل الدوت نيت؟

Moayad Mardini,
MSDN Forums Moderator

محترف مشرف عبد اللطيف حاجي علي مشاركة 3

لو كنت مكانك لاستعملت الـ Sockets. ممكن حتى استخدام تقنية الـ RPC (Remote Procedure Call) و الـ RMI (Remote Method Invokation) لجعل الأمر أكثر سهولة وأقل تعقيداً بحيث لا يحس المبرمج أنه يستخدم تقنية ما للتواصل بين برنامجين.

عبد اللطيف حاجي علي
مبرمج
In|Framez

خبير مدير وسام البهنسي مشاركة 4

في 23/شعبان/1430 01:52 ص، غمغم مؤيد مارديني باستغراب قائلاً:

استعمال الخدمات التي يقدمها WCF يبدو مثالياً، ولكن هل تستعمل الدوت نيت؟

أحد البرنامجين يستعمل دوت نيت (مكتوب بلغة C++/CLI). الثاني لا يستعمل دوت نيت وهو مكتوب بلغة ++C فقط.

 

بتاريخ 23/شعبان/1430 02:28 ص، قطب عبد اللطيف حاجي علي حاجبيه بشدة وهو يقول:

لو كنت مكانك لاستعملت الـ Sockets. ممكن حتى استخدام تقنية الـ RPC (Remote Procedure Call) و الـ RMI (Remote Method Invokation) لجعل الأمر أكثر سهولة وأقل تعقيداً بحيث لا يحس المبرمج أنه يستخدم تقنية ما للتواصل بين برنامجين.

حسناً. لقد طالعت بعض المصادر عن الـ Sockets لكني لا أجد أني بحاجة لكل هذه الإمكانيات، فالبرنامجين يعملان على جهاز واحد. أحسست أن تقنية النداءات البعيدة RPC مناسبة أكثر لما أحتاجه، فنوعية التخاطب لدي هي فعلاً بشكل نداء إجراءات والوقوف حتى تعود بالنتيجة قبل متابعة الحسابات. الحل الذي لدي الآن باستخدام الـ FileMapping يعمل بنجاح، لكني لستُ واثقاً إن كان هو الأكثر فاعلية كنظام لهذه الطريقة من التخاطب. فما أقوم به هو أن يكتب البرنامج الأول البيانات على الملف ثم يرسل إشارة للبرنامج الثاني تعلمه بوجود بيانات جديدة، فيستقبل البرنامج الثاني الإشارة ويقرأ البيانات وهكذا. البيانات عموماً ذات أحجام صغيرة (بضع مئات من البايتات).
 
أثناء بحثي عن التقنيات التي اقترحتها أخي عبد اللطيف، وجدتُ الصفحة التالية:
 
http://msdn.microsoft.com/en-us/library/aa365574(VS.85).aspx
 
وهذه:
 
http://www.codeproject.com/KB/threads/fast_ipc.aspx
 
يبدو أن خياري في اعتماد الـ FileMapping مع الأحداث كان خياراً موفقاً ☺

وسام البهنسي
مبرمج في إنفيديا وإنفريمز

محترف مشرف عبد اللطيف حاجي علي مشاركة 5

وفي 14 آب 2009 11:03 م، ظهر شبح ابتسامة على وجه وسام البهنسي وهو يقول:

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



أما في 14 آب 2009 11:03 م، فقد تنهد وسام البهنسي بارتياح وهو يرد:

يبدو أن خياري في اعتماد الـ FileMapping مع الأحداث كان خياراً موفقاً


بشكل عام لا زلت أفضل الـ Sockets. فهي Cross-platform أكثر من الـ Shared Memory. ويمكن تعميمها ببساطة للعمل على أكثر من جهازين بعكس الـ Shared Memory. حتى أن الأجهزة يمكن أن تكون مختلفة.

عبد اللطيف حاجي علي
مبرمج
In|Framez

موهوب  ameer abu gneem مشاركة 6

بتاريخ 15 اغسطس 2009 07:45 ص، قطب عبد اللطيف حاجي علي حاجبيه بشدة وهو يقول:

وإن يكن. استخدام الـ Sockets مع الـ localhost في الحقيقة سريع جداً. فمكتبة الـ Sockets تعرف أنك تتعامل مع نفس الجهاز وتستخدم تقنيات أسرع من تلك التي تستخدمها عند الاتصال مع جهاز بعيد.

جيّد لكن لماذا يجب ان يتعب ويزيد من حجم برنامجيه كي يوصل كلٍ منهما بالاخر...سامحني لكن الـ Sockets هي مضيعه للوقت ما دام البرنامجين في
 
نفس الجهاز ولا يحتاج لفصلهما كلٌ في جهاز مستقل....خاصةً في بيئة الدوت نت فإن الـ Sockets في هذه البيئة ذات مواصفات وخصائص غير محدوده
 
تقريباً (بالمقارنه مع النسخ الاقدم) فلا داعي لان يتعب المبرمج نفسه ويستخدم هذه التقنيه. 
 
لذلك فلا بد من وجود ما هو انجع واسهل.
 
تقبل تحياتي...

--------------------

الحياة في بعض الاحيان لعبة مقرفه....لكن على الاقل تحتوي على جرافيكس متقدم :-)