Erlang 笔记】的更多相关文章

概述 类似Java中的Maven,Gradle,在Erlang中同样也有包管理的工具,Rebar提供Erlang依赖(包)管理机制,开发人员可以重复使用已有的模块,通过rebar引入自己的项目直接使用,通过GIT获取托管在github或码云上的项目. 使用依赖 1.找到github或码云上将要用到的项目GIT地址,为演示使用自己的项目,git地址为: https://git.oschina.net/woniu201/erlanglib.git  2.修改rebar.config配置文件    继…
概述 通过rebar可以发布rebar构建的erlang项目,生成可执行的二进制脚本文件,大大降低了执行应用的复杂度.该笔记Erlang环境为Erlang/OTP 19 ,以下适用于Eralng/OTP 15以上. 发布应用 使用笔记一的mqtt项目.步骤如下: 1.创建发布文件夹 mkdir rel && cd rel 2.创建节点 rebar  create-node nodeid=mqtt 成功后,生成如下文件夹 3.修改reltool.config配置文件 修改27行,{app,…
1 .同时打开的端口数量限制(Open ports) erlang:system_info(port_limit)查询 可以通过环境变量ERL_MAX_PORTS修改,或者配置erlang启动参数(标志+Q)修改(erl +Q 10000) 2.ets表的数量限制 默认值是1400,可以通过环境变量ERL_MAX_ETS_TABLES修改,或者配置erlang启动参数(标志+e)(erl +e 2000) 3. Erlang默认创建进程限制 erlang:system_info(process_…
集成开发环境:IntelliJ IDEA的Erlang插件 教程:www.erlang-cn.com/462.html,寻找erlang程序设计第2版pdf f():释放之前绑定过的所有变量. -export([Name/N]):表示带有N个参数的名为Name的函数. Erlang中同一模块同名但是参数个数不同的两个函数,是两个完全不同的函数,他们之间除了名字相同,别无关联. -import():从模块导入函数,以后使用时不需要加模块名前缀. -export():从模块导出,以便于在模块之外的其…
Rebar概述 Rebar是一款Erlang构建工具,使用它可以方便的编译,测试erlang程序和打包erlang发行版本.Rebar其实是一个独立的erlang脚本,默认情况下,Rebar会按照Erlang/OTP来组织项目结结构,构建时的配置工作量很少.同时rebar提供依赖(包)管理机制,方便程序员重用已存在的模块.依赖管理机制支持GIT方式. 安装rebar rebar已经托管到了github上,下载地址:https://github.com/rebar/rebar/releases,使…
http://wenku.baidu.com/link?url=AUQR8Hn-e-fEB_lqjXsd8XfapWj1qAK7J05JoBXFib_LlSk5qSOTia8HIxNV1XkeZi-kHFsH18Qb9NED5PKiPb8h6oDFVR6KG75MUSYAAMm Erlang 学习笔记    一.Erlang语言特征重点  1.catch是返回表达式的值或者错误信息的元组 try…catch是可以捕捉不同的错误类型以及有流程控制  2.发送消息永远不会失败,如果尝试发送消息给一个…
erlang shell 命令: help(). 可以查看erlang shell内置命令. 比如:m(Mod),可以查看模块Mod. 待续..…
入门 启动Shell 在cmd中输入命令”erl”,百分号(%)表示一个注释的开始,从百分号开始到这行结束的所有文本都被看做是注释. 一个完整的命令需要以一个句点和一个回车结束. 退出erlang的命令是q(). 命令 f() 会让 shell释放它所绑定过的所有变量.即所有的变量都编程自由变量. 变量 所有的变量必须以大写字母开头. Eralng的变量只能被赋一次值,第二次赋值会出现匹配失败的错误.一个变量如果含有一个被赋予的值,就称为绑定变量,否则称为自由变量.一开始所有变量都是自由的. 在…
#从源码编译安装Erlang 1. wget http://www.erlang.org/download/otp_src_r16b.tar.gz -p /usr/local/src 2. tar zxvf otp_src_r16b.tar.gz -c /usr/local/src 3. cd otp_src_r16b 4. ./configure --prefix=/usr/local/erlang 5. make 6. make install 7. 将"/usr/local/erlang/…
今天,为了安装RabbitMQ,需要安装Erlang,中间遇到了一些坑,记录下来. 1. 下载Erlang安装包 http://www.erlang.org/downloads http://erlang.org/download/otp_src_18.3.tar.gz 2. otp_src_18.3.tar.gz 拷贝到机器 @m1-cm-uap-srv81.m1,注意,后面的安装需要使用root权限 3. tar zxvf xxx ; cd otp_src_18.3 ; ./configur…
字符串是双引号,单引号的是atom元组: 下标从1开始 X = {'test1',2,3,4}. element(1,X). 配合模式匹配,可以给元素项命名,直接不用下标标记元素项 列表增删改查 增加: 通过管道符号,把左边的数据添加到右边的列表 [5,4,3|[1,2]]. 两个列表通过 ++ 生成新列表 [1,2,3,4] ++ [7,8,9,10]. 删除: 大列表--小列表,当然是生成新变量了 [1,2,3,4,5,6,7,8] -- [1,2,3,4]. 修改: erlang变量不可以…
环境:ubuntu_server 1210 目的:构建web版hello world程序 参考链接:http://roberto-aloi.com/blog/2013/07/13/create-deploy-erlang-cowboy-application-heroku/   1.使用rebar 构建一个项目的基础目录   首先获取rebar工具 $ git clone https://github.com/rebar/rebar.git $ cd rebar $ ./bootstrap $…
对一个运行中的Erlang系统来说,进程绝对是重要的组成部分.正因为进程是所有运行实体的基础,因此会想去了解它们的更多信息.幸运的是,VM提供了大量的可用信息,其中有些可以安全使用,有些在生产环境中使用是不安全的(因为会返回非常大的数据集合,拷贝到shell以及打印所需的内存量会造成节点崩溃). 进程的所有信息都可以通过调用process_info(Pid, Key)或者process_info(Pid, [keys])86得到. 下面是一些常用的键值:…
error_logger 爆炸 具有讽刺意味的是,负责错误日志的进程竟然是最为脆弱的之一.在Erlang的缺省安装中,error_logger39负责记录日志(写入磁盘或者发送到网络上),它的速度要比错误产生的速度慢得多.尤其是在记录用户产生的日志消息(不是错误)或者大量进程崩溃时,更是如此.对于前者,是因为error_logger本来就不适用于记录高度连续的消息.它只适用于真正的异常情况,并不期望过多的消息量.对于后者,是因为崩溃进程的完整状态(包括其消息邮箱)都会拷贝出来进行日志记录.这种消…
为过载做计划 到目前为止,我在实际工作中所碰到最常见的错误,基本上都是节点内存耗尽.而且通常都和过长的消息队列有关37.解决这类问题的方法有很多,不过只有在深入.全面的理解系统后,才能做出正确的选择.    基本上,我从事的所有项目都可以简化类比成一个非常大的浴室水槽.用户请求和数据从龙头流入.Erlang系统则是水槽和管道,可以把水流出的地方(数据库,外部API或者服务,等等)看作是下水道系统. 当Erlang节点由于队列溢出而死亡时,找到原因所在是至关重要的.是流入槽中的水太多了吗?是下水道…
1.大家听说Erlang,往往是因为其对高并发的良好支持.其实,Erlang的核心特征是容错,从某种程度上讲,并发只是容错这个约束下的一个副产品.容错是Erlang语言的DNA,也是和其他所有编程语言的本质区别所在. 2.从某种意义上讲,Erlang不仅是一门编程语言,更是一个系统平台.它不仅提供了开发阶段需要的支持,更提供了其他语言所没有的运行阶段的强大支持.其实,在静态检查和测试阶段发现的问题往往都是些“不那么有趣”的问题,那些逃逸出来的bug才是真正难对付的.特别是对于涉及并发和分布式的b…
一般循环用在遍历列表的时候,erlang有lists模块直接支持遍历,不需要自己写尾递归遍历list lists:foreach 用来遍历列表,不保存结果,最后一次返回ok lists:map 遍历列表,不过,每次函数 Fun 执行的结果将保留,并组成一个列表返回. lists:filter 遍历列表,根据返回值决定是否保留结果,true保留,false不保留,最后形成列表 上面这些,在为list做遍历的时候,非常有用 还有一个lists:nth方法,根据位置获取元素,不过需要注意的是,索引从1…
正如<代码的未来>中所说,为了充分利用多核,并发变成将成为未来发展的趋势,对于并发编程的支持,Erlang确实是不二之选,Erlang在国内仍然较为小众,经典书籍相对也要少很多,最终选择了<Erlang程序设计 第2版>作为了我的第一本Erlang入门书籍. Erlang官方网站:http://www.erlang.org/ Erlang安装: 对于Ubuntu和Debian发行版可采用:apt-get install erlang 来安装: 对于其他 UNIX 和 Linux 平…
http://blog.csdn.net/karl_max/article/details/3985382 1. erlang分布式编程的基本模型 (1) 分布式erlang:这种模型可以让我们在一个紧密耦合的计算机集群上编写程序. (2) 分布式erlang应用程序运行在一个可个这个进程的环境中.一个局域网的不同集群之间,但在同一个防火墙里面. (3) 基于套接字的分布式应用:使用TCP/IP套接字,我们可以编写运行在非信任环境中的分布式应用程序.2. 编写分布式程序的步骤: (1)先在一个非…
http://blog.csdn.net/karl_max/article/details/3977860 1. 并发原语: (1) Pid = spawn(Fun) %% 创建一个新的并发进程,用于对Fun求值. (2) Pid ! Message %% !是发送操作符,消息发送是异步的,返回结果是消息本身,所以Pid1!Pid2!...!M可以向多个进程发送消息M. (3) receive ... end %% 接收一个发送给当前进程的消息,是同步的.语法: receive Pattern1…
http://blog.csdn.net/karl_max/article/details/3976372 1. erlang:halt()可以即刻停止系统运行. 2. q()命令可以完成文件和数据库的一些处理后再退出.它是init:stop()的一个shell别名 3. erlang可以动态加载代码,正在运行的代码可以在重新编译后动态加裁而不用停止程序的运行. 4. 模块加载相关函数: code:get_path() %% 可以获取当前加载路径的设定值. code:all_loaded() %…
http://wgcode.iteye.com/blog/1007623 第二章 入门 1.所有的变量都必须以大写字母开头,如果要查看某个变量,只要输入变量的名字即可,如果一个变量被赋予值,就称为绑定变量,否则被称为自由变量,一开始所有变量都是自由的. 有一点像Java中的常量,这就是为什么用大写字母的原因. 2.  “=” 近似于一个赋值操作符,是一个模式匹配运算符,当X是自由变量未被赋值时“=”是赋值运算符,否则是模式匹配运算符. 3. “/”除号永远返回浮点数. 4. 原子用来表示不同的非…
安装 Ubuntu Server上: sudo apt-get install erlang 如果安装时下载 太慢,可手工下载deb包( esl-erlang_16.a-rc1_ubuntu_precise_i386.deb ),下完deb文件后,ftp到虚拟机上,用dpkg -i <.deb file>安装(需要首先安装JRE):Ubuntu Server不能更改屏幕大小,也不能copy/paste文本,所以用kitty ssh过去操作比较好: erlang 语法 代码中逗号,分号,句号的用…
参考这里和这里了解到的文件操作的模块有很多:kernel下有:file,stdlib下有:filelib,filename,file_sorter.(具体查看官方文档)…
函数%###geometry.erl###-module(geometry). 定义-export([area/1, function1/2, function2/0, ...]).area({rectangle, Width, Height}) -> Width * Height;area({square, X}) -> X * X;area({circle, R}) -> 3.1415926 * R * R. 编译c(geometry). 调用geometry:area({recta…
提示符erl 注释% comment 表达式123456789 * 123456789. 变量(单一赋值)X = 123456789.X.Y = X * X * X.Y.f(). 整数浮点数X = 5 div 3.Y = 5 rem 3.Z = 5 / 3.A = 3.14 * R * R.字符 & 字符串(列表一种 必须使用"")定义 & 赋值Name = "hello".Name = [$h, $e, $l, $l, $o].提取[83, 117…
如果某个进程需要持续地接收新任务,那么其在执行耗时过长的锁或者阻塞操作时,就会出现问题. 最为常见的例子之一就是:某个进程使用了TCP socket,阻塞在了接收新的连接或者等待消息上面.在执行此类阻塞操作时,消息会不受限制地堆积在消息队列中. 一个更为糟糕的例子是我曾经为lhttpc库的某个分支写的http连接池管理器.在大多数测试用例下,它都工作正常,我们甚至把连接的超时时间设置为10ms,以确保不会耗费太多的时间40.正常工作了几周后,该HTTP连接池导致了一次服务中断,原因是有个远程服务…
  上周Erlang讨论群里面提到lists的++实现,争论大多基于猜测,其实打开代码看一下就都明了.贴出代码截图后有同学问这代码是哪里找的?   "代码去哪里找?",关于Erlang源码阅读的路线图江湖上只有一份残卷了.我觉得"代码在哪儿?"这类问题是信息不对称造成的,本身难度不大,就像<贫民窟的百万富翁>里面的情节:贾马尔知道市井生活中的零零碎碎却说不出国徽上的文字,我们就从电影中的这一幕开始本文的探索吧     内景,演播室—夜晚 普瑞姆:这个问题…
   我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下.    做笔记 一开始笔记软件做的不好的时候就发邮件给自己,然后不断的回顾更新笔记; 后来用OneNote,由于这玩意当时不是云同步的,硬盘坏掉的时候丢了一些数据,打击还是挺大,好多事情要从头开始 再后来用过一段时间Google Wave,还以和朋友分享讨论笔记,结果,你们知道关闭服务了,费力导出来 现在转战Evernote和思维导图Conceptdraw 记忆是靠不…
回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hashs(哈希类型).这些数据类型都 支持push/pop.add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的.在此基础上,redis支持各种不同方式的排 序.与memcached一样,为了保证效率,数据都是缓存在内存中.…