Erlang epmd的角色以及使用

问题描述

很多同学误会了epmd的作用,认为epmd就是erlang集群的协议,我来澄清下:Epmd是Erlang Port Mapper Daemon的缩写,在Erlang集群中的作用相当于dns的作用,提供节点名称到端口的查询服务,epmd绑定在总所周知的4369端口上。epmd文档:这里epmd协议:这里Erlang的节点名称是类似这样的foo@ip的格式,当一个节点启动的时候,首先会在本机启动epmd,同时把自己的节点名称和节点监听的tcp端口登记在上面。看代码:// erlexec.c02 03...04 05case 'n':06 07 if (strcmp(argv, "-name") == 0) { /* -name NAME */08 09 if (i+1 >= argc)10 11 usage("-name");12 13 14 15 /* 16 17 * Note: Cannot use add_args() here, due to non-defined 18 19 * evaluation order. 20 21 */22 23 24 25 add_arg(argv);26 27 add_arg(argv);28 29 isdistributed = 1;30 31 i++;32 33...34 35case 's': /* -sname NAME */36 37 if (strcmp(argv, "-sname") == 0) {38 39 if (i+1 >= argc)40 41 usage("-sname");42 43 add_arg(argv);44 45 add_arg(argv);46 47 isdistributed = 1;48 49 i++;50 51 }52 53...54 55 if (isdistributed && !no_epmd)56 57 start_epmd(epmd_prog);58 59...我们可以透过erl -epmd EPMD_PROG来传入不同的参数。再**实验:$erl -sname a02 03$erl -sname b04 05$erl -sname c06 07$ ps -ef|grep epmd08 09membase 4592 1 0 Aug25 ? 00:00:39 /usr/local/bin/epmd -daemon10 11...12 13$ netstat -an|grep 436914 15tcp 0 0 0.0.0.0:4369 0.0.0.0:* LISTEN 16 17$ epmd -names18 19epmd: up and running on port 4369 with data:20 21name c at port 409622 23name b at port 409724 25name a at port 409826 27...28 29$erl -sname x30 31Erlang R14B04 (erts-5.8.5) 1 32 33 34 35Eshell V5.8.5 (abort with ^G)36 37(x@my031091)1> erl_epmd:port_please(x, "127.0.0.1").38 39{port,34625,5}40 41 42 43(x@my031091)2> erl_epmd:names().44 45{ok,}epmd是个标准的tcp服务器,它的协议如下:

时间: 2024-11-01 06:41:08

Erlang epmd的角色以及使用的相关文章

讨喜的隔离可变性-前言

曾有个的医嘱是这样说的:"如果它伤到了你,那就别再用它了".在并发编程领域,共享可变性就是那个"它". 虽然JDK的线程API使我们可以非常容易地创建线程,但如何防止线程冲突和逻辑混乱却又成了大问题.STM虽然可以解决部分问题,但是在一些类似Java这样的语言中,我们仍不得不非常小心谨慎地避免非托管可变变量和事务逻辑中产生某些副作用.而令人惊讶的是,当共享可变性消失的时候,所有那些令人纠结的问题也都随之消失了. 事实证明,在相同数据集上起多个线程互相冲突地执行是行不

【原创】RabbitMQ官网文档翻译 -- Clustering Guide

      为了方便工作中使用,自己花费了周末空闲的时间对 RabbitMQ 的集群配置相关文档进行了翻译,鉴于自己水平有限,翻译中难免有纰漏产生,如果疑问,欢迎指出探讨.此文以中英对照方式呈现. 官方原文:http://www.rabbitmq.com/clustering.html ============== 我是分割线 ================ Clustering Guide集群配置 A RabbitMQ broker is a logical grouping of one

【原创】erlang 模块之 epmd

什么是 epmd ? 在<Erlang/OTP 并发编程实战>中,对 epmd 有如下描述:  epmd  代表 Erlang 端口映射守护进程(Erlang Port Mapper Daemon). 每启动一个节点,都会检查本地机器上是否运行着 epmd ,如果没有,节点就会自行启动 epmd . epmd 会追踪在本地机器上运行的每个节点,并记录分配给它们的端口. 当一台机器上的 Erlang 节点试图与某远程节点通信时,本地的 epmd 就会联络远程机器上的 epmd(默认使用 TCP/

浅析Erlang分布的核心技术

Erlang系统在我看来有3个特性: 1.分布 2.多核心支持 3.fp. 这3个特性中分布我认为是erlang最强大的,从第一个版本就支持到现在,相对非常成熟,而多核心支持是这几年才加进去的. erlang的分布系统做到了2点: 1.节点的位置无关性; 2.对用户分布式透明的. 具体体现就是node是靠名字识别的, 进程也是靠pid来识别. 分布系统就要实现节点间通讯,erlang也不列外. erlang的节点通讯介质是可以替换的 目前官方版本支持tcp, ssl通讯. 可以用 -proto_

AKKA文档(java版)—角色

原文地址  译者:Zhanggc      审校:吴京润 角色 角色模型对编写并发.分布式系统进行了高度抽象.它减轻了开发者必须对互斥锁与线程管理的负担,更容易编写出正确的并发与并行系统.早在1973 年 Carl Hewitt 发表的论文中定义了角色,但一直流行于Erlang 语言中,随后被爱立信公司应用于建立高并发.可靠通信系统,取得了巨大成功. Akka 框架里面角色的API 跟Scala 框架里面角色相似,后者一些语法曾经模仿Erlang语言. 创建角色 注意:由于Akka强迫父级监管者

【原创】Erlang 之 erl_crash.dump 生成

-=-=-=-=- 我是<我是歌手 >的分隔线 -=-=-=-=-  (以下为原文引用)        crashdump 对于 erlang 的系统来讲如同 core 对于 c/c++ 程序一样宝贵,对于系统问题的修复提供了最详细的资料.当然 erlang 很贴心了提供了网页版的 crashdump_view 帮助用户解读数据,使用方法如下: crashdump_viewer:start().       因为 crashdump 文本文件里面记录了大量系统相关的信息,这些信息对于分析系统的

为什么我们放弃了Erlang技术栈

至2013年小博无线云端系统上线以来,我们一直是Erlang的重度使用者.尽管小博无线技术团队不乏拥有10年以上经验的精英级Erlang程序员,然而,从2016年开始,我们已不再使用Erlang开发新业务,而我们放弃Erlang技术栈的原因可被简要概括为下面这句话: 让开发和运维更简单 总的来说,Erlang技术栈的优点在云计算环境中要么难以体现,要么容易寻找到成熟的替代方案,但弱点却既顽强又难以绕开.以下逐一展开说明. 优点: 易用的高并发轻量级进程 这一度是Erlang独有的优势,但在今天,

AKKA文档(Java版)—建立有限状态机角色

原文地址  译者:Zhanggc 建立有限状态机角色 概述 有限状态机模式在Erlang design principles里面被很好描述出来.简而言之,它可以被视为一组关系: State(S) x Event(E) -> Actions (A), State(S') 这些关系描述为: 如果我们在状态S 和 时间E 发生,我们应该执行动作A 与转换到状态S'. 而Scala 程序语言使构建一个良好内部DSL(领域特定语言)成为可能,后者用于规划有限状态机(请见FSM).对于用同样方法,由于Jav

AKKA文档(java)——角色系统

角色是封装了状态与行为的对象,它们通过交换放入接收者信箱的消息实现两两之间的通讯.从某种意义上说,角色是最严格的面向对象编程,不过最好还是把它们当作人来看待:当用角色为一个方案建模时,想象有一群人,并给他们分配了任务,他们在一个组织结构中发挥职能作用,并想象如何做到故障升级(就像在不需要考虑实际利益的情况下与人打交道,也就是说我们不需要关心他们的情绪变化或道德问题).这样的结果可以充当构建软件的心理脚手架. 注意:一个角色系统是一个会分配1-N个线程的重量级结构,因此为每个逻辑上的应用创建一个角