Erlang OTP: Distributed & Fault-Tolerant Systems Programming · درس

استدعاءات الإجراءات البعيدة (RPC)

نفّذ دوال على عقد بعيدة باستخدام RPC، بما يتيح الحوسبة الموزعة واستدعاء الخدمات عبر عنقود

الدرس 2 من 412 خطوة

استدعاءات الإجراءات البعيدة (RPC) درس مجاني في Erlang OTP: Distributed & Fault-Tolerant Systems Programming على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Erlang OTP: Distributed & Fault-Tolerant Systems Programming، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Erlang OTP: Distributed & Fault-Tolerant Systems Programming 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

What is Remote Procedure Call?

Imagine you have two Erlang programs running on different machines, or even on the same machine but in separate Erlang "nodes." How do they talk?

Remote Procedure Call (RPC) is a way for one program (the client) to ask another program (the server) to execute a function, just like it would call a local function. The client doesn't need to know the details of network communication.

Erlang's Built-in RPC Module

Erlang makes distributed computing easy with its built-in rpc module. This module provides functions to call or cast computations on remote Erlang nodes.

  • rpc:call/4: For synchronous calls, meaning the client waits for a reply.
  • rpc:cast/4: For asynchronous calls, where the client doesn't wait for a reply.

These are powerful tools for building distributed applications.

Setting Up for RPC

Before we can use RPC, we need at least two Erlang nodes connected. Each node needs a name and a shared cookie for authentication.

Open two separate terminal windows and start Erlang nodes like this:

  • Node 1: erl -sname server_node -setcookie mysecret
  • Node 2: erl -sname client_node -setcookie mysecret

Make sure they can ping each other: net_adm:ping(server_node@yourhostname).

Synchronous RPC with `rpc:call/4`

The rpc:call/4 function is used when you need an immediate answer from the remote node. It takes four arguments:

  • Node: The name of the remote Erlang node.
  • Module: The module on the remote node where the function resides.
  • Function: The name of the function to execute.
  • Args: A list of arguments for the function.

The calling process will block until it receives a reply or an error.

RPC Call Example: Server Module

Let's create a simple module math_server.erl. Save this code and compile it on server_node:

1. Save as math_server.erl

2. Compile on server_node: c(math_server).

-module(math_server).
-export([add/2, multiply/2]).

add(A, B) ->
    A + B.

multiply(A, B) ->
    A * B.

RPC Call Example: Client Interaction

Now, from client_node, we can call the math_server:add/2 function remotely! Remember to replace yourhostname with your actual machine's hostname.

Type this into client_node's Erlang shell:

rpc:call(server_node@yourhostname, math_server, add, [10, 5]).

Understanding RPC Results

When you execute rpc:call/4, Erlang handles the network communication for you. The result of the remote function call is returned directly to the calling process.

If the remote node doesn't exist, the module isn't loaded, or the function crashes, rpc:call/4 will return an error tuple like {badrpc, Reason}. This helps you manage potential issues in your distributed system.

Asynchronous RPC with `rpc:cast/4`

Sometimes you don't need an immediate response from a remote call. You just want to send a request and continue your work. This is where rpc:cast/4 comes in.

rpc:cast/4 works similarly to rpc:call/4 but it's a "fire and forget" operation. The client sends the message and does not wait for a reply, making it non-blocking.

RPC Cast Example: Logger Module

Let's create a simple logger module. Save this as logger.erl and compile it on server_node:

1. Save as logger.erl

2. Compile on server_node: c(logger).

-module(logger).
-export([log_message/1]).

log_message(Message) ->
    io:format("~p: Remote log: ~p~n", [self(), Message]).

RPC Cast Example: Client Interaction

Now, from client_node, use rpc:cast/4 to send a log message to server_node. Notice that client_node doesn't wait for a response.

Type this into client_node's Erlang shell (replace yourhostname):

You'll see the log message appear on server_node's console!

rpc:cast(server_node@yourhostname, logger, log_message, ["Hello from client!"]).

Quick RPC Check

You've learned about synchronous and asynchronous remote procedure calls in Erlang.

Recap: RPC for Distributed Erlang

In this lesson, you explored how Erlang's built-in rpc module enables seamless function execution across different nodes.

  • We learned about rpc:call/4 for synchronous, blocking calls when a result is needed.
  • We also covered rpc:cast/4 for asynchronous, non-blocking calls when no immediate reply is required.
  • Setting up connected nodes with shared cookies is crucial for RPC to work.

RPC simplifies distributed programming, allowing you to build applications that leverage multiple Erlang nodes easily.

البدء مجانًا

تعلم Erlang مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
12
الدروس
48

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

هل درس «استدعاءات الإجراءات البعيدة (RPC)» مجاني؟

نعم — نص درس «استدعاءات الإجراءات البعيدة (RPC)» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Erlang OTP: Distributed & Fault-Tolerant Systems Programming، انتقل إلى CoddyKit PRO. تتضمن دورة Erlang OTP: Distributed & Fault-Tolerant Systems Programming 4 دروس في المجموع.

ماذا ستتعلم في «استدعاءات الإجراءات البعيدة (RPC)»؟

نفّذ دوال على عقد بعيدة باستخدام RPC، بما يتيح الحوسبة الموزعة واستدعاء الخدمات عبر عنقود تتمرن على Erlang OTP: Distributed & Fault-Tolerant Systems Programming مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Erlang OTP: Distributed & Fault-Tolerant Systems Programming؟

لا تُشترط خبرة سابقة. Erlang OTP: Distributed & Fault-Tolerant Systems Programming على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «استدعاءات الإجراءات البعيدة (RPC)»؟

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

هل يمكنني كتابة وتشغيل أكواد في درس Erlang OTP: Distributed & Fault-Tolerant Systems Programming هذا؟

نعم. كل درس في Erlang OTP: Distributed & Fault-Tolerant Systems Programming يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. إعداد العقد والتواصل بينها
  2. استدعاءات الإجراءات البعيدة (RPC)
  3. تسجيل العمليات عالميًا
  4. أمان التوزيع وملفات Cookies
← العودة إلى Erlang OTP: Distributed & Fault-Tolerant Systems Programming