0Pricing
React Academy · درس

الاتصال بين العمليات باستخدام IPC

استخدم ipcMain وipcRenderer لإرسال الرسائل بأمان بين العملية الرئيسية وعملية عرض React

الاتصال بين العمليات باستخدام IPC درس مجاني في React Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في React Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة React Academy 4 دروس في المجموع.

ipcMain.handle: نمط الطلب والاستجابة

تسجّل ipcMain.handle قناة مسماة في العملية الرئيسية تستجيب للطلبات الواردة من عملية العرض. وتقبل دالة معالج غير متزامنة، وتصبح قيمة إرجاعها القيمة التي تُحل إليها Promise في عملية العرض، مما يجعلها مناسبة لعمليات مثل قراءة الملفات أو الاستعلام من قاعدة بيانات.

ipcRenderer.invoke: استدعاء العملية الرئيسية

ترسل ipcRenderer.invoke رسالة عبر قناة مسماة وتعيد Promise تُحل بقيمة الإرجاع من معالج العملية الرئيسية. وينشئ ذلك نمط طلب واستجابة غير متزامن وواضحًا، ويعمل بصورة طبيعية مع async/await في كل من سكريبت preload ومكوّنات React.

إتاحة invoke عبر contextBridge

يغلّف سكريبت preload استدعاءات ipcRenderer.invoke ويتيحها من خلال contextBridge. مثلًا: api.readFile = (filePath) => ipcRenderer.invoke('read-file', filePath). تستدعي عملية العرض window.api.readFile(path) وتحصل على Promise في المقابل؛ وهي واجهة واضحة ومعزولة.

لماذا لا تستورد عملية العرض ipcRenderer مطلقًا

عند تفعيل contextIsolation، لا تستطيع عملية العرض استخدام require('electron') أو استيراد ipcRenderer مباشرةً؛ فالوحدة غير متاحة لها ببساطة. ويجب أن تمر جميع اتصالات IPC عبر إتاحة contextBridge في سكريبت preload. وهذا مقصود لمنع هجمات XSS من الحصول على وصول إلى IPC.

ipcMain.on: رسائل الإرسال دون انتظار استجابة

تستمع ipcMain.on إلى الرسائل أحادية الاتجاه المُرسلة باستخدام ipcRenderer.send (وليس invoke). ولا توجد قناة استجابة تلقائية؛ ويناسب هذا النمط الإشعارات أو الأوامر التي لا تحتاج فيها عملية العرض إلى رد، مثل تسجيل الأحداث أو تشغيل إشعار أصلي.

دفع البيانات من العملية الرئيسية إلى عملية العرض

يمكن للعملية الرئيسية دفع البيانات إلى عملية العرض باستخدام webContents.send('channel-name', data). وهذه هي الطريقة الأساسية التي تبدأ بها العملية الرئيسية الاتصال؛ فمثلًا يمكنها تمرير أحداث مراقبة نظام الملفات أو إجراءات القوائم الأصلية إلى واجهة React.

ipcRenderer.on: الاستماع في preload

في البرنامج النصي للتهيئة المسبقة، تسجّل ipcRenderer.on('update', callback) مستمعًا لرسائل push الواردة من العملية الرئيسية. ويتلقى callback الحدث وأي بيانات أرسلتها العملية الرئيسية، ثم تمررها إلى renderer عبر الدالة التي يتيحها contextBridge.

إتاحة مستمعي الأحداث عبر contextBridge

من الأنماط النظيفة للتعامل مع أحداث push أن تكتب: api.onUpdate = (callback) => ipcRenderer.on('update', (_event, data) => callback(data)). وتشترك مكونات React باستدعاء window.api.onUpdate(setData)، ثم يحدّث callback الحالة عند دفع العملية الرئيسية لبيانات جديدة.

التنظيف: إزالة مستمعي الأحداث

يجب إزالة كل مستمع يسجله ipcRenderer.on عند عدم الحاجة إليه، منعًا لتسرّبات الذاكرة واستدعاءات callback المكررة. ويجب أن تعيد دالة التهيئة المسبقة دالة تنظيف، مثل () => ipcRenderer.removeListener('update', callback)، تستدعيها React من دالة التنظيف التي تُعاد من useEffect.

الأمان: التحقق من مدخلات IPC

يجب التعامل مع مدخلات IPC القادمة من renderer على أنها بيانات غير موثوقة داخل معالج العملية الرئيسية. تحقّق دائمًا من مسارات الملفات لمنع هجمات اجتياز المسار، ونقِّ معلمات الاستعلام، وتحقّق من أن أصل المرسل متوقَّع. لا تتيح مطلقًا قناة IPC عامة لـ eval أو exec.

تنظيم قنوات IPC

مع نمو تطبيقك، نظّم قنوات IPC باستخدام اصطلاحات لتسمية النطاقات، مثل: 'fs:read-file' و'db:query' و'window:minimize'. احتفظ بأسماء القنوات في ملف ثوابت مشترك يستورده كل من main.js والبرنامج النصي للتهيئة المسبقة، لتجنّب الأخطاء المطبعية وجعل إعادة الهيكلة أكثر أمانًا.

القيمة المعادة من ipcMain.handle

ماذا يحدث للقيمة التي يعيدها معالج ipcMain.handle؟

مراجعة الدرس

يُعد IPC العمود الفقري للتواصل في Electron. يشكّل كل من ipcMain.handle وipcRenderer.invoke زوجًا قائمًا على Promise لتنفيذ عمليات بدأها renderer وإرجاع استجابات لها. أما عمليات الدفع التي تبدأها العملية الرئيسية، فيتعاون فيها webContents.send مع ipcRenderer.on. ويجب تمرير كل اتصالات IPC في renderer عبر contextBridge في البرنامج النصي للتهيئة المسبقة، كما ينبغي تنظيف المستمعين دائمًا لمنع تسرّبات الذاكرة.

الأسئلة الشائعة

هل درس «الاتصال بين العمليات باستخدام IPC» مجاني؟

نعم — نص درس «الاتصال بين العمليات باستخدام IPC» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة React Academy، انتقل إلى CoddyKit PRO. تتضمن دورة React Academy 4 دروس في المجموع.

ماذا ستتعلم في «الاتصال بين العمليات باستخدام IPC»؟

استخدم ipcMain وipcRenderer لإرسال الرسائل بأمان بين العملية الرئيسية وعملية عرض React تتمرن على React Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ React Academy؟

لا تُشترط خبرة سابقة. React Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «الاتصال بين العمليات باستخدام IPC»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس React Academy هذا؟

نعم. كل درس في React Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية Electron: عمليتا التشغيل الرئيسي والعرض
  2. إعداد React مع Electron
  3. الاتصال بين العمليات باستخدام IPC
  4. حزم تطبيقات منصات سطح المكتب وتوزيعها
← العودة إلى React Academy