我最近在 InfoQ 上看到了一个关于 Erlang 的视频,在该视频中,一位创建者展示了如何替换消息循环的行为。
他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么?还是其他一些更原生的功能?
我最近在 InfoQ 上看到了一个关于 Erlang 的视频,在该视频中,一位创建者展示了如何替换消息循环的行为。
他只是发送一条包含新版本消息循环代码的 lambda 的消息,然后调用它而不是再次调用旧循环。
Erlang 中的代码热交换指的是什么?还是其他一些更原生的功能?
是的,erlang 服务器中的热插拔一般就是指这个特性。在 stackoverflow 问题Achifying code swapping in Erlang's gen_server中以及在这个整洁的Erlang Generic Server 教程或这个 little one中有很好的解释。
Erlang/OTPgen_server
模块提供了一种通用的方式来实现热插拔,通过Module:code_change/3
在回调模块中实现一个函数。
这样,您可以在不关闭服务器代码的情况下升级服务器代码,或者如果某些事情没有按预期工作,则回退到以前的实现。通常,应使用通用发布处理程序进行热插拔。