تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[التواصل بين التطبيقات] - مفهوم الاتصال الداخلي وتطبيقه (IPC)
#1
بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

كيف حالكم يا اعضاء منتدى فيجوال بيسك العرب ..


--


اليوم سنتكلم عن احد مفاهيم البرمجة الحديثة وهو مفهوم الاتصال الداخلي بين التطبيقات او بعبارة ادق التواصل بين ال(Processes) ، يسمى هذا المفهوم اختصارا بـ IPC بمعناه : Inter-process communication
الهدف من تطبيق هذا المفهوم هو تمكين الاتصال وتبادل البيانات بين عدة تطبيقات اما تعمل على نفس الجهاز او عن بعد ..











اهمية الـ IPC ؟




من الامور الشائعة لاستخدام هذا المفهوم ،  هي عندما تكون هناك الحاجة لتطبيقات صغيرة مساعدة لتطبيقك الاساسي ..مثلا :: بعض المطورين عندما يريدون عمل خاصية الابديت لتطبيقهم الاساسي ، في اغلب الاحيان يقومون بصنع برنامج صغير باسم updater.exe ويضعونه بجانب التطبيق الاساسي
بحيث ان updater يتكفل بالبحث عن اخر التحديثات وتنزيلها ثم يحذف التطبيق الاساسي القديم ويستبدله بالتطبيق الاساسي الجديد

في مثالنا اعلاه ، يوجد لدينا اثنان process ، هما تطبيق updater الصغير ، والبرنامج الاساسي ...
الان عندما تريد عمل تواصل بين هذين التطبيقين يجب عليك ان تطبق مفهوم الIPC Smile

عند تطبيقك للIPC ـ سيمكنك هذا من ارسال Messages بين التطبيقات ، او سحب/طلب/تبادل بيانات بين التطبيقات ، او ارسال الاوامر الى تطبيق اخر Cool


مثال اخر ، برنامج الWord بطبيعة الحال يحتوي على مصحح املائي ، لو افترضنا ان المصحح املائي هو برنامج منفصل عن برنامج الword ، عندها يجب على مايكروسوفت تطبيق مفهوم الIPC بين التطبيقين بحيث ان البرنامج الاساسي يرسل الكلمة المراد فحصها املائيا الى "برنامج المصحح الاملائي" ،، بعدها يقوم برنامج المصحح الاملائي بمعالجة الكلمة ، ثم في النهاية يقوم بارسال النتيجة الى البرنامج الاساسي (الword) . Wink


توجد حالات كثيرة مختلفة ولكن لاداعي لذكر المزيد .. فقط تذكر هذا المفهوم دائما عندما تحتاج الى عمل تواصل بين تطبيقين Smile
وتذكر ليس بالضرورة ان تكون التطبيقات التي تريد عمل تواصل بينها  لها واجهة مرئية .







تطبيق الـ IPC


في الواقع هناك اكثر من 10 طرق لتطبيق الIPC ، منها : Sockets , Pipe , Shared File  , Windows Messages , Web Services Shared Memory .وهناك غيرها...

طبعا ليس جميع هذه الطرق بالامكان تطبيقها دائما ، فمثلا لايمكننا تطبيق طريقة الShared Memory بين تطبيقين بعيدين (ليسا على نفس الجهاز)

وليس جميع هذه الطرق لديها نفس الكفاءة ، مثلا الـSockets تقنية صعبة التنفيذ ودائما تواجه العديد من المصاعب والمأسي لتعمل بشكل صحيح (اكثر هذه المشاكل سببها الجدار الناري) ..

بينما عندما نتحدث عن السرعة ، فلا يوجد اسرع من طريقة الShared Memory وهي الطريقة التي سنطبقها لتحقيق مفهوم الIPC Smile









كيف تعمل Shared Memory


الـ Shared Memory باختصار ، هو مشاركة منطقة محددة من الMemory بين التطبيقات.


قد يستغرب الكثيرين كيف بالامكان تحقيق فكرة الShared Memory في الدوت نت !!

لان كما نعرف تطبيقات الدوت نت (#C او فيجوال بيسك) هي تطبيقات مدارة بواسطة الGarbage collector ، فهو المسؤول عن حذف الكائنات وتغيير مواقعها في الMemory ، وذلك لاظهار اكبر كفائة ممكنة لتطبيقك ..

فليس بالامكان حجز Buffer او بالاحرى (Block) لان الGarbage Collector ستعبث به بالتأكيد ،، قد يفكر البعض بالاستعانة باحد قدرات السي شارب ، وهي استعمال المؤشرات مع الكلمة المفتاحية fixed لحجز block ، حيث نعلم عند تطبيق هذه الطريقة ، لن تخضع هذه المؤشرات الى الgarbage collector ولن يتم تحريكها او تبديل عناوينها .. ولكن هل هذا يحل المشكلة ؟؟

الجواب المفاجئ هو لا ،،، لان نظام التشغيل ولمبدأ الامان ، يقوم بمنع اي وصول ل Zone اخر غير الـ Zone الخاص بتطبيقك >>


كما في الصورة ، كل Process او تطبيق يعمل على جهازك له منطقة (Zone) منفصلة عن البقية (المربعات الصفراء)
ونظام التشغيل لا يسمح ابدا لاي تطبيق بالوصول الى بيانات موجودة في Zone تطبيق اخر غير تطبيقك ..

اذن لو حجزت buffer من خلال احد التطبيقات ، سيتم حجزه على الZone الخاص بهذا التطبيق
ولن يستطيع البرنامج الاخر الوصول لهذا الbuffer .

اذن تخطي هذا الموضوع صعب جدا تقنيا ، لذلك ولحسن الحظ وفرت مايكروسوفت في الـ Freamwork 4 كلاس خاص لعمل Shared Zone ، بحيث يتمكن كلا التطبيقين من الوصول الى هذا الZone المنفصل بواسطة Key خاص >>











------ير
تطبيق الـShared Memory



مع صدور Framework version 4 تم توفير Class خاص بأسم MemoryMappedFile

هذا الكلاس يقوم بحجز Zone مشترك في الذاكرة فيمكنك الاستفادة من هذا ال Zone في انشاء buffer مشترك لتبادل البيانات بين التطبيقين
بحيث يمكنك الكتابة او القراءة من buffer بسهولة تامة ، ويتم هذا الموضوع بسرعة فائقة لان دائما التعامل مع الMemory اسرع بكثير من التعامل مع الhard disk او مع الشبكة ، لذلك يعتبر الShared Memory اسرع طرق التواصل بين التطبقات على الاطلاق Smile

في المرفقات تجدون تطبيق، يمكنه ارسال رسائل بين نسخه وذلك بواسطة الShared Memory
بالاضافة الى مشروع اخر لايوجد فيه سوى كلاس واحد باسم Message ، هذا الكلاس يمثل هيكل الرسائل التي سيتم تناقلها بين التطبيقين .




تحياتي


الملفات المرفقة
.rar   Apps.rar (الحجم : 76.05 ك ب / التحميلات : 73)
الرد }}}
#2
بارك الله فيك
موضوع متعوب عليه الحقيقة
شكرا جزيلا
الرد }}}
#3
(19-04-16, 11:56 PM)Amir_alzubidy كتب : بارك الله فيك
موضوع متعوب عليه الحقيقة
شكرا جزيلا
الرد }}}
تم الشكر بواسطة: الشاكي لله , الشاكي لله
#4
موضوع رائع ومهم
طب لو عايز اشغل الفيديو من ملف نصى (تشفير) من الرام ؟
ارجوا توضيح الفكرة
الرد }}}
تم الشكر بواسطة:
#5
(22-04-16, 02:37 PM)WAEL ABED كتب : موضوع رائع  ومهم
طب لو عايز اشغل الفيديو من ملف نصى (تشفير) من الرام ؟
ارجوا توضيح الفكرة

شكرا لك ...


لم افهم ماتقصده بتشغيل فيديو من ملف نصي من الMemory !!

ارجو المزيد من التوضيح



-----


للعلم ، ربما البعض يعتقد ان التطبيقات تتعامل مع الRam مباشرة
في الحقيقة لا ، تطبيقات الوندوز تتعامل مع الvirtual memory وليس مع الRAM مباشرة
ويلعب الوندوز دور الوسيط بين الvirtual memory والRAM

لذلك دائما شروحات ومستندات اللغة لابذكر فيها الRAM ، بل يذكر فيها الMemory لأنه في الحقيقة التطبيقات تتعامل مع الvirtual memory وحتى عناوين الذاكرة التي تسطيع جلبها بالمؤشرات ماهي الا virtual وليست حقيقية
الرد }}}
تم الشكر بواسطة:
#6
فى المرفقات ملف تكست 
لفيديو ولكن فقط يتم استرجاع  الملف وسيكون الملف فيديو فى نفس المكان هل يمكن تشغيل هذا الملف من الميمورى مباشرة


الملفات المرفقة
.rar   System.rar (الحجم : 51.89 ك ب / التحميلات : 40)
الرد }}}
تم الشكر بواسطة:
#7
هذا الفيديو كيف مشفر !!

كيف يمكنني ارجاعه الى اصله ؟
الرد }}}
تم الشكر بواسطة:
#8
اوك سوف ارسل مشروع بسيط بيرجع هذا الملف الى فيديو من غير مشكلة
الرد }}}
تم الشكر بواسطة:
#9
وعليكم السلام ورحمة الله وبركاته
ألف شكر على الموضوع القيم والمهم
Smile
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: الشاكي لله
#10
(24-04-16, 11:38 AM)السندبااد كتب :
وعليكم السلام ورحمة الله وبركاته
ألف شكر على الموضوع القيم والمهم
Smile

شكرا على مرورك ياغالي ..
نورت المنتدى بوجودك Smile
الرد }}}
تم الشكر بواسطة: السندبااد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم