昨天我问了similar question关于在另一个内部使用一个应用程序的问题
我们想说我想在新模块<div class="st-container">
<input type="radio" name="radio-set" checked="checked" id="st-control-1"/>
<a href="#st-panel-1">Something</a>
<input type="radio" name="radio-set" id="st-control-2"/>
<a href="#st-panel-2">Happiness</a>
<input type="radio" name="radio-set" id="st-control-3"/>
<a href="#st-panel-3">Tranquillity</a>
<input type="radio" name="radio-set" id="st-control-4"/>
<a href="#st-panel-4">Positivity</a>
<input type="radio" name="radio-set" id="st-control-5"/>
<a href="#st-panel-5"> WebGear</a>
<div class="st-scroll">
<section class="st-panel" id="st-panel-1">
<div class="st-deco" data-icon="H"></div>
<div id="section1">
<div id="menu"> <img id="menuitem" src="Images/Menuitem.png"/>
<div id="hlava">
<div id="flashContent">
Some content 1
</div>
</div>
</div>
</div>
</section>
<section class="st-panel" id="st-panel-2">
<div class="st-deco" data-icon="H"></div>
<div id="section1">
<div id="menu"> <img id="menuitem" src="Images/Menuitem.png"/>
<div id="hlava">
<div id="flashContent">
Some content 2
</div>
</div>
</div>
</div>
</section>
</div>
</div>
中使用名为x
的应用程序。
y
已经编译,为了简单起见,我们假设它已经在localhost上运行,目标是在不同的节点中运行这两个组件。
如何从x
内调用x
的功能?
像y
之类的东西会起作用吗?
此外,是否需要任何(网络)设置才能使用rpc:call(Node, x, Fun, Param)
模块?
重要
如果您无法测试两个节点之间的连接,请确保使用命令行标记rpc
,并在-name
调用中包含全名。例如如果您为节点net_adm:ping/1
命名,则必须通过执行x@localhost
从另一个模块中ping x
。注意单引号。有关详细信息,请参阅this question。
答案 0 :(得分:3)
如何致电x
取决于其API以及x
是否与y
在同一节点中运行。
如果x
与y
在同一节点中运行,并且声明了应用程序依赖项,x
在y
启动之前启动,则只需调用进入x
模块,与调用任何其他本地模块相同。
如果x
位于不同的节点,那么是的,使用the rpc
module来调用它是一个可行的选择。只要y
节点可以通过Distributed Erlang连接到x
节点,rpc
就可以在不进行任何额外设置的情况下工作。
我提到了API,因为模块经常通过将其流程ID注册到某种名称注册表来完成工作,例如通过erlang:register/2
,the global registry注册本地注册表。或者gproc之类的其他注册表,并且呼叫者可能需要首先直接或间接访问注册表以找到他们尝试呼叫的目标。例如,在调用gen_server
instance时,您通常需要将您尝试调用的实例的名称或pid作为参数传递,对于远程调用,还需要目标节点名称。 / p>