用Crystal包装器连接Elixir和Go后端

2025-06-19
用Crystal包装器连接Elixir和Go后端

Mozi团队需要将一个新的Elixir Phoenix LiveView应用连接到现有的Go后端。他们尝试了NIFs和Ports,但最终选择使用Erlang的C节点,并用Crystal编写了C包装器来简化维护。这个方案在编译时和运行时都解耦了代码库,通过在Elixir端使用`Node.list`来检测C节点连接,并使用S6进行容器内重启。虽然存在跨C/Go边界的性能损耗,但这对于他们的用例来说是可以接受的。最终实现了Elixir、Crystal和Go三种语言的混合应用,提高了代码的可维护性。

开发