前提:
erlang节点的连通是传递性的,即A节点连通B节点,若B节点之前已经连通C节点,那A也会连通C;节点间的通讯其实就是tcp连接,所以能少则少,erlang有提供 -connect_all false 启动参数,这样A连通B时就不会跟着连通C
问题:
假设有三组节点,唯一中央节点C;云节点组Y1,Y2…YN;普通节点组N1,N2…NN;
云节点组跟普通节点组都跟C连通,怎么让云节点组跟普通节点组在需要通讯时连通?
方案:
所有节点在跟C连通后,由C收集所有节点的cookie,并把cookie告知云节点组,云节点调用erlang:set_cookie(Node, Cookie),这时云节点跟普通节点并没有连通,但需用通讯时就会自动连通;
说白了就是N1向Y1发送某个命令=用tcp发送一条数据,在验证时N1发现这个Y1的cookie跟自己存的Y1的cookie一致,所以就允许通讯,所以就连通了,否则则拒绝
http://download.csdn.net/download/ownhome/10044405
这里搞了测试的代码,十分简陋,也无注释
后续
发现两节点间互联并不一定得cookie相同,比如节点A,B,A设置B的cookie为test,B也设置A的cookie为test,这时也是可以连通的
最后欢迎大神指点