erlang

erlang(2) gen_server

纵然是瞬间 提交于 2020-01-11 03:46:14
通过前面的 erlang(1) 我们了解到了一个基本的服务器的实现方法。 erlang中为我们提供了这样一个服务器的现成的实现,就是gen_server,不用自己去编写服务器程序了。 所要做的就是以下几个事: 1.确定我们回调模块的名称 2.编写接口函数 3.实现六个回调方法 也就是说我们只需要关注于回调模块的实现就OK了。 1: -module(XXXX) 定义模块名称 2:接口函数,可供调用的函数。 在这里你可以定义所有需要的方法,作为功能调用的入口。 例如常见的start()、stop()等。他们的作用就是调用gen_server,完成指定功能。 3:实现回调函数,一共需要实现六个。 init()/1 ----当我们调用gen_server:start_link 时,服务器会调用此方法 handle_call/3 ----当我们调用gen_server:call 时服务器会调用此方法 handle_cast/2 ----当我们调用gen_server:cast 时服务器会调用此方法 handle_info/2 ----处理外界发送给服务器的原生消息,例如一个通过PID ! message 发送过来的 消息 terminate/2 ----终止服务器时会调用的方法 code_change/2 ----代码热替换,软件升级代码替换时调用的函数 来源: https://www

Erlang OTP学习(1)gen_server

谁说胖子不能爱 提交于 2020-01-10 20:25:09
在《Programming Erlang》的OTP introduction章节中,作者通过循序渐进的方式,向我们展示了gen_server设计思路,现在做下总结: 在具体看gen_server之前,我们先看一个server通用框架: 在这个server里,你几乎看不到任何和具体功能相关的东西,它只提供了一个server所具备的基本框架,那它是如何运行的呢? 当我们调用start函数时,就启动了一个服务,如果服务器接收到一条消息,那么它将会把这条消息转交给Mod:handle_call或者Mod:handle_cast处理 ,然后把执行结果返回给客户端(可选),接着继续等待新消息。 从这个过程中我们不难发现,服务器实际上充当着“代理”的角色,而真正处理客户端请求的其实是另外一个Module(我们称之为:callback模块) 这样有什么好处呢? 我谈谈自己的拙见: 1.解耦,把服务器功能部分和非公能部分分离,这样可以我们就可以更加专注于服务器功能模块的编写(即callback模块) 2.复用性,如果我们希望开发一个具有新功能的server,我们可以复用现有的server框架,然后编写具有新功能的callback Module即可 现在我们看一个callback Module例子(它提供了KV存储功能) 其中init, handle_call方法是用来供server端回调的,而add

How can i split a binary in erlang

早过忘川 提交于 2020-01-10 14:14:24
问题 What I want is, I think, relatively simple: > Bin = <<"Hello.world.howdy?">>. > split(Bin, "."). [<<"Hello">>, <<"world">>, <<"howdy?">>] Any pointers? 回答1: There is no current OTP function that is the equivalent of lists:split/2 that works on a binary string. Until EEP-9 is made public, you might write a binary split function like: split(Binary, Chars) -> split(Binary, Chars, 0, 0, []). split(Bin, Chars, Idx, LastSplit, Acc) when is_integer(Idx), is_integer(LastSplit) -> Len = (Idx -

RabbitMq--2--安装

不打扰是莪最后的温柔 提交于 2020-01-10 12:27:59
简单说下个人的理解,mq就是一个消息代理,负责异步消息转发,可以很大程度缓解服务器压力,并且防止服务器宕机影响业务等。 安装: 环境:centos7 1).首先需要安装erlang #wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm#可能会报错,如果报错则# wget http://mirrors.sohu.com/fedora-epel/epel-release-latest-7.noarch.rpm#rpm -ivh epel-release-latest-7.noarch.rpm #rpm -ivh erlang-solutions-1.0-1.noarch.rpm #yum install erlang 安装过程中会有提示,一路输入“y”即可。 检查:#erl 返回的是22 查看安装路径:whereis erlang 2).上述完成后安装RabbitMQ: 注意,注意,注意,erlang与rabbitmq两者的版本要求,这个是rabbitmq官网列出的版本对应:https://www.rabbitmq.com/which-erlang.html 看清erlang的版本再下载,否则不兼容,下面是我遇到的问题,反正一开始不懂,谷歌了好久才发下原因: Job for

CentOS7.2安装RabbitMQ笔记

谁说我不能喝 提交于 2020-01-10 12:26:28
身为.NET程序员,用着宇宙级IDE,干什么事都变得越来越懒了,Windows操作系统在手,能通过桌面点点点的方式何必找其他罪受呢。。于是RabbitMQ自然而然也就跑在Windows上了,说实话Windows配置RabbitMQ太恶心了,尤其对于手贱的人,总想着装了卸卸了装,慢慢的各种问题就出来了,不从装系统解决起来备受煎熬。。当然服务器上肯定不这么干,但自己电脑肯定不知不觉的瞎折腾,然后就比如安装的时候报这种问题: 重装系统肯定是不可能的- -征战这么久的电脑,桌面上的东西都懒得整理。。 Docker说实话真是个好东西,RabbitMQ镜像一拉分分钟就玩起来了,但Docker毕竟也有局限性,baidu查一下数据库不适合容器化大致能读到点弊端,队列同理。 最近又回过头来把RabbitMQ搞到CentOS上也是为了节约成本提升性能, RabbitMQ配置 里存在一个hipe_compile的属性,它的描述如下: 醒目的20-50%性能提升不是一点点的诱惑,然而蛋疼的是默认不开启,而且很不友好的强调了下。。不支持Windows平台。。所以搞吧。。 安装erlang 先下载最新的erlang安装包,可以上 官网下载页面 下载后扔到CentOS服务器上也可以服务器本地通过命令行下载 wget http://erlang.org/download/otp_src_19.3.tar.gz

CentOS 7.3 安装配置RabbitMQ

≯℡__Kan透↙ 提交于 2020-01-10 04:02:26
安装RabbitMQ   参照 官方文档   由于rabbitmq基于erlang开发,需配置erlang环境,rabbitmq大于3.7.0版本要求erlang版本 >=19.3。   yum安装,在目录/etc/yum.repos.d/下创建rabbitmq-erlang.repo文件   内容如下 [rabbitmq-erlang] 3 name=rabbitmq-erlang 4 baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 5 gpgcheck=1 6 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc 7 repo_gpgcheck=0 8 enabled=1   保存退出    yum clean all //清除    yum makecache //生成缓存   下载至服务器并安装    wget https: //dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.10/rabbitmq-server-3.7.10-1.el7.noarch.rpm    yum install rabbitmq-server-3.7.10-1.el7.noarch

erlang OTP gen_server 图解分析

余生颓废 提交于 2020-01-10 03:36:34
http://www.hoterran.info/otp-gen_server-sourcecode 在阅读erlang的otp源码gen_server.erl的时候,一直想写点什么,用一种最好的方式表达出来,最终却总是没法表达清楚,困惑之余看到这篇文章,作者用图解的方式,非常清晰明了的表达了我一直想表达的东西,下面是原文链接: http://www.hoterran.info/otp-gen_server-sourcecode 感谢原创作者热心的分享。 阅读OTP源码可以帮助你写出更好、更健壮的erlang程序.下面一系列文章就gen_server、gen_fsm、supervisor的源码进行分析, 从erlang级别解释其工作原理, 所有的完整流程图在这里, 第一次写erlang方面博文有错误请帮忙指出. 为什么从gen_server它开始, 因为gen_fsm和它很类似, 而supervsisor本身是一个gen_server. init 图示为一个叫Mod的模块, 它是一个gen_server程序, 绿色方格为调用进程(客户进程), 黄色方格为spawn出的gen进程(服务进程). 不同的泳道表示函数所隶属的模块, 通过这个图可以清晰的看出各个模块至之间的相互调用, 图是使用 gliffy 所画。 从左上角的start(Args)开始,gen

软件-MQ-RabbitMQ:RabbitMQ

你。 提交于 2020-01-10 02:57:56
ylbtech-软件-MQ-RabbitMQ:RabbitMQ RabbitMQ是实现了 高级消息队列协议(AMQP) 的 开源消息代理软件 (亦称 面向消息的中间件 )。RabbitMQ服务器是用 Erlang 语言编写的,而集群和故障转移是构建在 开放电信平台 框架上的。所有主要的编程语言均有与代理接口通讯的客户端 库 。 1. 返回顶部 1、 中文名:消息队列 外文名:Message Queue 简 称:MQ 释 义:一种程序对程序的通信方法 目录 1 简介 2 历史 3 基本概念 4 主要特性 5 安装 6 参见 2、 2. 返回顶部 1、 简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用 Erlang 语言编写的,而群集和故障转移是构建在 开放电信平台 框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。 历史 Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被 VMware 旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。 基本概念 RabbitMQ是一套 开源(MPL) 的消息队列服务软件,是由 LShift

Linux下安装RabbitMQ

蓝咒 提交于 2020-01-09 17:32:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Linux下安装RabbitMQ 安装Erlang环境 安装GCC GCC-C++ Openssl等模块,安装过就不需要安装了 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 安装ncurses yum -y install ncurses-devel 安装erlang环境 wget http://erlang.org/download/otp_src_18.2.1.tar.gz tar xvfz otp_src_18.2.1.tar.gz ./configure make install 安装RabbitMQ 下载rabbitmq-server-3.6.9.tar.xz wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-generic-unix-3.6.9.tar.xz 对于下载xz包进行解压,首先先下载xz压缩工具: yum install xz 对rabbitmq包进行解压: xz -d xz -d rabbitmq-server-generic-unix-3.6.9.tar.xz tar -xvf

RabbitMQ C#使用之一windows配置Erlang环境

こ雲淡風輕ζ 提交于 2020-01-09 10:46:05
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> windows配置Erlang环境 1.说明   1.1 操作系统 win10x64   1.2 Erlang(['ə:læŋ])是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。 使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。Erlang运行时环境是一个虚拟机,有点像Java虚拟机,这样代码一经编译,同样可以随处运行。它的运行时系统甚至允许代码在不被中断 的情况下更新。另外如果需要更高效的话,字节代码也可以编译成本地代码运行。 2.下载安装 下载地址:http://www.erlang.org/downloads 本人下载了 OTP 19.2 Windows 64-bit Binary File   下载下来双击安装,不表。 3.设置环境变量   手动编辑“path”加入路径 C:\Program Files\erl8.2\bin    4.检查Erlang是否安装成功   打开 cmd ,输入 erl 后回车,如果看到如下的信息,表明安装成功。    5.over 来源: oschina 链接: https://my.oschina.net/u