zoukankan      html  css  js  c++  java
  • erlang局域网内节点通信——艰难四步曲

    http://blog.chinaunix.net/uid-22566367-id-382011.html

    在Programming Erlang这本书中,在写到第十章中,主要实现的是不同节点之间的通信,书上列出了四步,其中的第一步很容易实现,依葫芦画瓢,很容易实现同一台机子上,不同节点之间的通信,运行结果和书上的完全一致。
    当你急切地去尝试第二步(在局域网内,不同机子之间的通信)时,你可能会卡住的(本人是这样的,不知道你?),实践的结果和Joe所说的完全不一样(你如果按照书上所说,在kvs:start()的情况下,然后rpc,会得到这样的结果——{badrpc, nodedown})。
    下面,就把本人的艰难四步总结一下,
    1)学会使用net_adm:ping(node@Hostname)命令。
        这个结果可能是pong,也可能是pang。其中pong表示可以ping通,pang表示ping不通。
    2)ping通局域网。
    在linux shell下把你要通信pc机ping通。
    注意有一种可能,就是ping IP地址成功了但是ping机器名称没成功,那是因为机器名和IP地址没有关联。关联的方法是编辑机内的hosts文件。windows平台这个文件在system32/drivers/etc里,而*nix在/etc里。把机子的IP和hostname关联起来,在操作系统shell去ping,成功后再到Erlang下面去ping。(网上的资料)
    3)启动erlang节点。
        如果以上步骤能实现的话,就启动erlang shell吧。
    例如,在一个局域内,我在不同的机子上各自启动了一个erlang shell。
    gaoyi@gaoyi-laptop:~$ erl -name fang@192.168.200.53 -setcookie 123
    [sunny@localhost ~]4$ erl -name sunny@192.168.200.11 -setcookie 123
    注:如果在启动的时候,不用ip的话,下面是ping不通的。
    4)net_adm:ping的实现。
        例如,我在gaoyi机子上,执行net_adm:ping('sunny@192.168.200.11').
    得到的结果是pong,表示可以ping通了,o(∩∩)o...哈哈。
    注意:net_adm:ping()内的参数必须带引号的。

    在局域网内部,一般用短节点名来完成短节点的全联通。
         全联通的前提之一是cookie要相同,cookie记录在一个文件中。
         对于同一个物理机上的两个erlang节点,不用其他配置就可以全联通。
         对于不在同一个物理机上的erlang节点,需要配置cookie才行。
         在其中一台物理机的命令行上执行erl  -sname s1@hostname,在另一台物理机的shell上执行erl -sname s2@hostname
         分别在shell上执行auth:get_cookie(),查看是否相同,如果不同则通过auth:set_cookie(node(),'yourcookie')设置成相同的。
         然后执行net_adm:ping(OtherNode),OtherNode就是s!@hostnames2@hostname
         如果执行结果是pong,则表示成功了,可以通过nodes()查看。


    至此,我们实现了局域网之间的通信,可以进一步测试程序了。

  • 相关阅读:
    WPF换肤之八:创建3D浏览效果
    ADPlus
    由INotifyPropertyChanged,BindingList绑定引发的跨线程异常及其解决办法
    无服务器端的UDP群聊功能剖析(重构版本)
    A Short Guide to DBI[转]
    绑定到异步的ObservableCollection
    使用反射+缓存+委托,实现一个不同对象之间同名同类型属性值的快速拷贝
    ORM查询语言(OQL)简介概念篇
    无需重新编译代码,在线修改表单
    LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
  • 原文地址:https://www.cnblogs.com/fvsfvs123/p/4244786.html
Copyright © 2011-2022 走看看