我想知道将gen_server / gen_fsm从erlang节点A移动到erlang节点B以保持其内部状态的建议方式(如果有的话)。
答案 0 :(得分:1)
AFAIK没有办法在erlang节点之间传输进程,我可以考虑许多理由禁止这个,在其他人之间你可能会弄乱内部节点内存,只需考虑一个保存数据的进程(除了在内部'状态'循环参数)在进程字典(进程堆),二进制(不同的垃圾收集方法)。
一种解决方法可能是为gen_fsm / gen_server提供一种方法,该方法可以生成在服务器/状态机的内部状态同时重新创建的新进程。 我认为要实现起来更难,你可以简单地使用两个启动函数:
但我必须说,我在这里看到两个主要问题:
前者可以通过多种方式解决(我的两分钱:在本地和远程服务器之间传递显式消息 - 开销但考虑到Erlang运行时系统的防弹),后者可以通过监视器/链接和退出返回值来解决(远程服务器pid)或以更优雅的方式使用带有gen_event进程的发布/订阅模型。
我希望您发现这对解决您的问题非常有用,如果您需要,可以提出任何问题!