昨天我問了一個similar question關於在另一個應用程序中使用一個應用程序。
比方說,我想在一個新模塊y
中使用名爲x
的應用程序。
x
已被編譯,爲簡單起見,我們假設它已經在本地主機上運行,並且目標是在不同節點中運行這兩個組件。如何使用已經從模塊運行的OTP應用程序?
如何從y
內撥打x
的功能?
會像rpc:call(Node, x, Fun, Param)
工作?
此外,是否需要使用rpc
模塊進行任何(網絡)設置?
重要
如果你不能夠在兩個節點之間的測試連接,請確保您使用命令行標誌-name
和您在您的通話net_adm:ping/1
全名。例如如果您命名節點[email protected]
,則必須通過執行net_adm('[email protected]').
從另一模塊ping x
。注意單引號。有關更多詳細信息,請參閱this question。
謝謝!節點應該是不同的,我忘了提到這一點。然而,你的答案是有用的,我試圖通過用'erl -name [email protected] -setcookie y'啓動一個新的shell來連接到'x'節點。我試着用'net_adm:ping(x)'來ping'x'',但它用'pang'響應。你有什麼想法我可能做錯了嗎? – goncalotomas
'x'節點的名稱是什麼?如果你在'x'節點上打開了一個Erlang shell,它的名字應該在shell提示符下。 「x」是用短名稱(使用'-sname')還是長名稱(使用'-name')開始的?你確定它使用同一個cookie嗎?如果你運行'epmd -names',它是否列出'x'節點?只是猜測,但我懷疑'127.0.0.1'部分應該是主機名。 –
在'x'上運行'node()。'輸出'x @ 127.0.0.1'。這就是爲什麼我命名'y'' y @ 127.0.0.1'。我相信兩者都使用長名稱('-name'),而不是短名稱。我通過在其輸出'x'的控制檯上運行'erlang:get_cookie()。'來從'x'獲取cookie。所以我用'erl -name [email protected] -setcookie x'開始'y',但結果保持不變。 我也感興趣的是運行'net_adm:names()'輸出'{ok,[{「x」,58521},{「y」,58920}}}和'epmd -names'輸出'name y at端口58920','端口58521處的名稱x'。 – goncalotomas