I grew tired of EPMD and made myself a module that converts node names to ports.
1. No additional daemon required
Does not start EPMD or any other service that needs to listen on any port, so you don’t need to add additional firewall rules to grant access to it.
2. Mix.Release compatibility
Nbpm effortlessly integrates with Mix releases, ensuring smooth production deployments. When you run
"your_app remote" or
"your_app rpc" commands, Nbpm automatically generates random port assignments, simplifying deployment.
3. Node Name to Port Number Mapping
Nbpm provides flexible methods for mapping node names to port numbers:
- Last Up to 5 Digits: If your node name ends with digits, Nbpm extracts the last up to 5 digits as the port number. For example, if your node name is “my_node12345,” Nbpm assigns port 12345.
- Special Prefixes: Node names starting with “rem-” or “rpc-” prompt Nbpm to assign random ports, ensuring compatibility with Mix releases.
- Hash-Based Port: In the absence of the above conditions, Nbpm employs the
:erlang.phash2function to hash the node name, using the resulting hash as the port number. This approach guarantees consistent name-to-port mappings across different machine architectures and ERTS versions.
If anyone is interested, give it a try: