erlang学习笔记(server/client通信)

erlang实现跨节点(节点可位于不同的计算机上)发送消息非常简单,代码如下:

-module(test).
-export([start/0,server/0,request/2]).

handle(Reqdata) ->
        "Hello " ++ Reqdata.

server() ->
        receive
                [From,{request,X}] ->
                        io:format("Get ~p from client ~p!~n",[X,From]),
                        Resp = handle(X),
                        From ! {reply,Resp},
                        server()
        end.

start() ->
        register(testserver,spawn(test,server,[])).

request(To,Name) ->
        {testserver, To} ! [self(),{request,Name}],
        receive
                {reply,Res} ->
                        io:format("Get ~p from ~p!~n",[Res,To])
        after 5000 ->
                io:format("connect failed~n",[])
        end.

1,将代码拷贝到两台主机上comA,comB上,其中comA为server端,comB为client端,这里需要确保comB配置好了comA的host

2,在comA和comB上创建~/.erlang.cookie,输入同样的内容

在服务器comA开启服务

comA:~/project # erl -sname hserver
Erlang R15B03 (erts-5.9.3.1) [source] [64-bit] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.3.1  (abort with ^G)
(hserver@comA)1> c(test).
{ok,test}
(hserver@comA)2> test:start().
true
Get "hello server!" from client <9327.39.0>!
(hserver@comA)3>

在客户端comB发起消息

comB:~/project # erl -sname hclient
Erlang R16B (erts-5.10.1) [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V5.10.1  (abort with ^G)
(hclient@comB)1> c(test).
{ok,test}
(hclient@comB)2> test:request(hserver@comA,"hello server!").
Get "Hello hello server!" from hserver@comA!
ok

 需要在comB的/ets/hosts中配置comB_ip comB

试了一下test:request(hserver@192.168.2.2,"hello server!").会有语法错,估计必须是通过主机名发起消息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值