-module(thread1).
-export([loop/0,rpc/2,start/0]).
start()->spawn(fun loop/0).
rpc(Pid,Request) ->
%(客户机)向进程[服务器]异步发送一个请求
%给进程Pid发送消息,self()是当前进程[客户机]的Pid
Pid !{self(),Request},
%(客户机)等待(服务器的[Pid进程])回应
receive
Reponse ->
io:format("succeed4 "),
%返回给调用方
Reponse+1
end.
loop()->
io:format("succeed1 "),
%等待消息到达,进行匹配
receive
{From1 ,{rectangle,Width,Ht}}->
%向客户机异步发送请求
From1 ! Width*Ht,
io:format("succeed2 "),
%匹配成功,继续下次消息匹配
loop();
{From1 ,_Other}->
%向客户机发送请求
From1 ! -1,
%匹配不成功,继续下次消息匹配
loop()
end .
%调用
% Pid=thread1:start().
% thread1:rpc(Pid,{rectangle,6,9}).
添加在客户机(进程)等待响应时候,根据绑定的Pid进行匹配,把其他线程(不是服务器[或者说不是函数调用的])的过滤掉
-module(thread2).
-export([loop/0,rpc/2,start/0]).
start()->spawn(fun loop/0).
rpc(Pid,Request) ->
%(客户机)向进程[服务器]异步发送一个请求
%给进程Pid发送消息,self()是当前进程[客户机]的Pid
Pid !{self(),Request},
%(客户机)等待(服务器的[Pid进程])回应
receive
%进入rpc函数的时候,Pid会绑定到某个值,因此{Pid,Reponse}中,Pid是绑定的
%而Response是自由的
%这个模式仅会匹配包含二元组而且元二祖第一个元素的Pid的消息
{Pid,Reponse} ->
%返回给调用方
Reponse
end.
loop()->
io:format("succeed1 "),
%等待消息到达,进行匹配
receive
{From1 ,{rectangle,Width,Ht}}->
%向客户机异步发送请求
From1 !{ self(),Width*Ht},
%匹配成功,继续下次消息匹配
loop();
{From1 ,Other}->
%向客户机发送请求
From1 !{ self(),{error,Other}},
%匹配不成功,继续下次消息匹配
loop()
end .
%调用
% Pid2=thread2:start().
% thread2:rpc(Pid2,{rectangle,6,9}).