我最近在InfoQ上看到了关于Erlang的视频, 在该视频中,其中一位创作者介绍了如何替换消息循环的行为。
他只是发送一条消息,其中包含新版本的消息循环代码的lambda,然后调用该消息而不是再次调用旧循环。
在Erlang中代码热插拔是否适合? 或者是其他更原生的功能?
答案 0 :(得分:17)
是的,在erlang服务器中进行热交换通常是指此功能。 stackoverflow问题Achieving code swapping in Erlang’s gen_server以及整齐的Erlang Generic Server tutorial或this little one中都有详细解释。
Erlang / OTP gen_server
模块通过在回调模块中实现Module:code_change/3
函数,提供了实现热交换的通用方法。
这样,您可以在不关闭服务器代码的情况下升级服务器代码,或者如果某些内容无法正常工作,则可以回退到以前的实现。通常,热插拔应使用通用release handler来实现。