erlang多节点name conflict
来源:互联网 发布:js验证身份证 编辑:程序博客网 时间:2024/06/08 13:27
今天游戏更新出现了一个问题,环境是这样的:顺序启动S1、S2、S3三个游戏服务器节点,能够正常工作。接着启动一个中央后台节点A,S1、S2、S3每隔几十秒的时间就会与节点A通信一次(使用erlang的进程通信方式),结果很快S2、S3崩溃了,S1能够正常工作。
查看到S2上的错误报如下:
(s2@192.168.0.1)1>
(s2@192.168.0.1)1>
=CRASH REPORT==== 18-Jul-2013::11:21:46 ===
crasher:
initial call: application_master:init/4
pid: <0.48.0>
registered_name: []
exception exit: killed
in function application_master:terminate/2 (application_master.erl, line
229)
ancestors: [<0.47.0>]
messages: []
links: [<0.6.0>]
dictionary: []
trap_exit: true
status: running
heap_size: 1597
stack_size: 24
reductions: 4422
neighbours:
(g002@192.168.51.99)1>
=INFO REPORT==== 18-Jul-2013::11:21:46 ===
application: game_server
exited: killed
type: temporary
上面的错误信息无法看出端倪,接着在节点A上的发现如下错误信息 :
=INFO REPORT==== 18-Jul-2013::11:21:46 ===
global: Name conflict terminating {waitforstart,<6533.49.0>}
** at node s2@192.168.0.1 **
这个错误信息提示的很明显了,全局的命名waitforstart有冲突。搜索了下代码果然发现了全局的注册函数
global:register_name(waitforstart, self())
将S1,S2,S3的代码修改一下,注册互不相同的全局名字,测试一切都正常了。
疑问?
命名的冲突是发生在S1,S2,S3节点上的,看起来跟节点A没有什么关系啊?
这是由于A未启动之前,S1,S2,S3之间没有任何的通信,所以不会去检测是否有全局的名字冲突。
可以做一个简单的测试来证明这个问题,启动S1,S2 不启动A,在S2上执行下面的命令
net_adm:ping('s1@192.168.0.1').
结果s2立马崩溃了
- erlang多节点name conflict
- erlang 启动多节点
- Error in XmlSqlMapClientBuilder. Alias name conflict occurred.
- Erlang节点的连接
- Erlang的hidden节点
- erlang 服务节点名称
- Erlang节点的连接
- erlang节点编程
- Erlang节点连接
- ERLANG 节点(node)
- erlang节点互联
- [Erlang]Erlang与C的节点通信
- Multiple process create and delete the same name file conflict
- erlang分布式节点通讯方式
- erlang分布式节点通讯方式
- erlang分布式节点通讯方式
- erlang节点通信小测试
- erlang otp节点间通信
- 打造Android的中文Siri语音助手(二)——添加虫洞的开放API
- php为空的几个判断
- 删除a表中和b表相同的数据
- 多线程GCD
- Lucene简介(理论篇)
- erlang多节点name conflict
- nginx 0.8.x中linux aio实现
- 关于JSValidation框架使用出现的问题
- DBA_JOBS_RUNNING
- 把windows的bat用好了,也很不错
- 事务槽及Oracle多种提交方式
- IOS学习笔记(5)UINavigationController UITabBarController
- GIT简介
- win8 激活相关