
erlang
文章平均质量分 96
Tony_Xian
这个作者很懒,什么都没留下…
展开
-
erlang——protobuf
项目Git地址:https://github.com/chenweiqi/erl_protobuffs/原创 2020-05-14 15:00:01 · 286 阅读 · 0 评论 -
Erlang port driver工作原理
与其说erlang是一个语言运行环境,不如说它是一个虚拟的操作系统环境。在这个操作系统环境下运行着虚拟的erlang process,这些process之间是独立并行运行的,由erlang虚拟机负责调度,就像在真的操作系统中一样。作为虚拟的操作系统,当然少不了对io的处理。这些虚拟的process需要虚拟的io设备来和外界通信。Port在整个erlang环境中就扮演了这个角色。在erlang中,一个Port其实就代表了一个io句柄。一个process通过open_port打开一个port,然后在这个po转载 2020-05-11 14:34:03 · 510 阅读 · 0 评论 -
Erlang socket 工作原理
由于对并发的原生支持,erlang在很多时候被用来构建网络服务器(socket server, http server...)的底层,处理大量的并发连接。理解erlang在底层如何处理socket,以及如何与自己的并发机制结合,对于使用erlang来构建网络服务至关重要。erlang的对socket的处理被分为两个部分。Port Driver的中的处理基本的io模型在《Erlang Port Driver工作原理》中,已经对port driver的运行机制做了初步的介绍。在erlang中,一个s转载 2020-05-11 13:00:31 · 413 阅读 · 0 评论 -
erlang maps底层数据
https://my.oschina.net/rongtou/blog/865900https://studygolang.com/articles/6964?fr=sidebar转载 2020-04-19 00:02:58 · 326 阅读 · 1 评论 -
erlang 创建进程参数
erlang优势在于线程消息传递及网络层处理,业务逻辑比较弱。1.-pa例子: -pa ebin 解释:指定执行文件(.beam)目录 2. +P+P 100000控制erlang最多创建的进程数量erlang:system_info(process_limit). // 查看系统的进程限制3.ERL_MAX_ETS_TABLES 或者 +eets表的数量...转载 2020-04-01 17:40:30 · 465 阅读 · 0 评论 -
Linux下安装Erlang
一、升级openssl# cd /usr/local/# wget http://www.openssl.org/source/openssl-1.0.1s.tar.gz# tar -zxvf openssl-1.0.1s.tar.gz# cd openssl-1.0.1s# ./config --prefix=/usr/local/openssl# vim Makefile--...转载 2020-02-16 19:46:47 · 972 阅读 · 0 评论 -
为什么函数式编程不用数组
链表是递归的数据结构,在上面的操作大部分可以用它的eliminator完成,最终效果就是数学归纳法因为函数式编程中大量的循环操作是依赖递归(和map)的,虽然map也是由递归实现的而这时候用链表这种递归定义的数据结构就是一种自然而然的事情了。但可达鸭眉头一皱,发现事情并不简单实际上,将链表换成数组也是能够正常使用的。但为什么我们还广泛的使用链表呢?因为在pure的环境下,对于数...转载 2020-02-07 14:36:35 · 222 阅读 · 0 评论 -
写着写着就懂了 erlang博客
https://www.cnblogs.com/zhongwencool/转载 2020-01-23 11:00:24 · 239 阅读 · 0 评论 -
erlang的Emakefile和批处理启动
在当前的项目文件夹下新建一个叫Emakefile,内容如下所示{'src/*',[debug_info,{i,"include"},{outdir,"ebin"}]}.然后在当前的项目文件夹下新建一个叫run.bat,内容如下所示erl -make...原创 2018-05-13 15:18:05 · 1084 阅读 · 0 评论 -
Sublime Text3配置erlang
代码自动提示,参考下面文章:https://jingyan.baidu.com/article/ac6a9a5e0d89582b643eac50.htmlerlang编译erlang的相关插件的下载https://github.com/fjl/Sublime-Erlang选择Sublime Text3里面的new build system,将下载回来压缩包里面的Erlang.sublime-bui...原创 2018-05-13 15:25:24 · 1435 阅读 · 0 评论 -
erlang Emakefile
Erlang有个类似Makefile的文件Emakefile负责编译erl程序,格式是Erlang代码{Modules, Options}.其中Modules是一个atom,或者是一个atom的列表。这些atom可以是一个模块名,如file1;可以是别的目录中的模块名,如../foo/file3;也可以是通过通配符匹配的一系列模块名,如file*;还可以是上述atom的列表,如['file*', ...转载 2018-05-13 15:30:45 · 774 阅读 · 0 评论 -
erlang常用查询网址
http://erldoc.com/http://www.cnerlang.com/api.html转载 2018-04-29 19:24:27 · 330 阅读 · 0 评论 -
rebar的使用
具体使用参考:https://www.cnblogs.com/jasonduan/p/5175599.htmlhttps://my.oschina.net/ffs/blog/517472https://blog.youkuaiyun.com/witton/article/details/50551022?utm_source=blogxgwz2附rebar的下载网址https://gith...转载 2018-04-29 18:58:38 · 2078 阅读 · 0 评论 -
erlang趣事之二进制型与位于法
表达式<<A:4,B:3,C:1>> = <<255>>,求A,B,C的值。看到这个题,我内心是崩溃的。因为不会计算二进制。什么是二进制?二进制型是一种数据结构,它被设计成用一种节省空间的方式来保存大批量的数据。首先计算255的二进制是1111 1111 ;《A:4,B:3,C:1》= 《255:8》.A=2#1111 =15;B=2#111=7;C...转载 2018-05-21 11:02:47 · 156 阅读 · 0 评论 -
gb_trees
gb_trees (General Balanced Trees) 通用二叉查找树,通常被用作有序字典.与普通未平衡二叉树相比没有额外的储存开销,这里所说的额外的存储开销是指是否使用额外的metadata记录节点相关的信息,dict和array的实现就使用了这样的描述信息,换句话说gb_trees是自描述的.性能优于AVL trees. 相关论文: General Balanced Trees h...转载 2018-05-21 11:03:57 · 619 阅读 · 0 评论 -
erlang连接mysql
想使用erlang连接mysql数据库,来百度找方法,但大多方法都不能用,在整合了集中方法之后,整理出了以下内容。1. 下载 erlang-mysql-driver地址:https://github.com/dizzyd/erlang-mysql-driver2. 将 erlang_mysql-driver解压3. 将 include 中的 mysql.hrl 复制到 src 目录下4. 编译 ....转载 2018-05-15 20:31:13 · 390 阅读 · 0 评论 -
erlang mysql 操作
erlang连接到MySQL数据库一,驱动的下载与安装1. 下载erlang-mysql-driver 下载地址如下: svn checkout http://erlang-mysql-driver.googlecode.com/svn/trunk/ mysql(如果你没有安装SVN,附件中提供源码下载)2. 对src下面的所有源码进行编译...转载 2018-05-15 20:32:15 · 200 阅读 · 0 评论 -
erlang第一天总结
1.在eclipse里面ctrl+s会保存并编译代码,如果更改了代码,需ctrl+s保存,并在erlang shell进入ebin里面用c:l(模块名)热更或重新进入erlang shell2.断言,当;和,同时存在时,断言从左到右计算,例如show(X, Y, Z) when X > 2, Y >1; Z >1 先计算X > 2, Y >1的结果,若此结果为A,则执...原创 2018-05-22 18:46:19 · 153 阅读 · 0 评论 -
erlang第四天总结
1.使用gen_tcp:send/2向该函数返回套接字Socket发送数据包,往端口的数据包发送下面的格式:{tcp,Socket, Data};2.如果建立Socket套接字时候选项列表中指定{active, false} 这样只能使用gen_tcp:recv/2或 gen_tcp:recv/3来接收...转载 2018-05-27 23:13:15 · 229 阅读 · 0 评论 -
erlang与C++的两种通讯方式
https://blog.youkuaiyun.com/erlib/article/details/46343331转载 2018-05-28 00:36:23 · 582 阅读 · 0 评论 -
erlang第二天总结
位串的概念:在大多数情况下,二进制型里的位数都会是8的整数倍,因此对应一个字节串。如果位数不是8的整数倍,就称这段数据为位串。所以当我们说位串时,是在强调数据里的位数不是8的整数倍。位语法表达式用来构建二进制或位串。...原创 2018-05-23 21:12:08 · 158 阅读 · 0 评论 -
erlang第三天总结
1.cmd进入某个盘,比如F盘直接f:2.-module(fac1).%% ====================================================================%% API functions%% ====================================================================-export...原创 2018-05-24 20:57:05 · 224 阅读 · 0 评论 -
erlang 二进制与位语法(bit syntax)
Erlang的位语法(Erlang Bit Syntax)提供了一种方法来表示和匹配二进制数据,这使得Erlang二进制对象在某种程度上等同于其他Erlang对象,如元组和列表。也因为其快速高效,使得在Erlang中,二进制对象被广泛使用,尤其是在协议编程方面。(官方文档)位语法/比特语法(bit syntax)Erlang的位语法表达式,即Erlang二进制的表示形式:[pla...转载 2018-06-20 19:54:27 · 528 阅读 · 0 评论 -
erlang poolboy
有两种情况需要考虑使用进程池管理erlang进程。一种是普通erlang进程,很便宜,一次可以并行很多(默认32K,当然可以调整vm参数设置更大),但是这不意味着可以无限制的使用,实际上轻松的达到上限是很容易的(想想发明国际象棋的那位向国王请赏的办法,类似的,一个进程开两个,两个再开四个,四个再开8个。。。。,很容易就达到了上限),因此有时候我们需要对进程进行管理,避免无限制的使用累垮系统。另一种...转载 2018-06-06 17:35:36 · 1551 阅读 · 0 评论 -
erlang第六天总结
1.异步接收用prim_inet:async_recv(Sock, Length, Timeout)gen_server里面这样写handle_info({inet_async, Socket, Ref, {ok, Data}}, State),要两者配合一起用,即先用async_recv,再调用handle_info2.prim_inet:async_recv的receive接收写法如下loop...原创 2018-06-01 09:42:49 · 1052 阅读 · 0 评论 -
erlang第五天总结
1.进程里的变量是私有的,erlang shell本身是一个进程,所以当打开多个erlang shell执行gen_tcp:conncet返回的Socket是相同,而在每一个erlang shell里面多次调用gen_tcp:connect返回的Socket是不同2.gen_tcp:recv会阻塞,直到收到消息为止。gen_tcp:recv(Socket,N),每次从Socket里读取N个字节,如...原创 2018-06-01 09:44:36 · 259 阅读 · 0 评论 -
Erlang程序对中文字符的表示方法
结论:中文字符,在Erlang的存储方式,可以是List,也可以是Binary。如果以List方式存储,即将中文字符,转为Unicode编码(长整数格式);如果以Binary方式存储,即将中文字符,转为UTF-8编码。至于Unicode与UTF-8的区别,简单来说,Unicode是一个码表,UTF-8是Unicode编码的一种表示方法。具体的区别,大家可问下谷歌或度...转载 2018-06-22 19:42:03 · 975 阅读 · 0 评论 -
Erlang:使用Erlang Json库
一、下载Erlang的Json库 文件名:tonyg-erlang-rfc4627-moved_to_github-48-g1614d95.tar.gz 下载地址:http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang/ github路径:https://github.com/t...转载 2018-06-22 19:47:24 · 490 阅读 · 0 评论 -
Erlang的gen_server的terminate使用的几点总结
1、process_flag(trap_exit,true)的理解。 process_flag(trap_exit,true)是允许该进程捕获退出信号,将退出信号转成{'EXIT‘,From,Reason}存在自己的邮箱中,可以通过receive或模式匹配取出该消息去做某些事情。 在gen_server中,要想通过handle_info({'EX...转载 2018-06-01 11:21:34 · 855 阅读 · 0 评论 -
Erlang 中文问题
具体做法: 1、外部文件使用utf8保存 2、erlang代码使用utf8保存 3、使用xmerl_ucs:from_utf8(Data)转换成unicode编码 4、使用io:format("~ts~n", [Data])在shell中打印 这样既能在erlang中知道有中文的字数,又能打印显示中文,一举两得 注: utf8编码是变长字节码,所以中文编码之后字数就不一样了。...转载 2018-06-22 20:59:02 · 1626 阅读 · 0 评论 -
Erlang的Xml解析
Erlang的Xml解析常用函数:xmerl_scan库:string(Text::list()) -> {xmlElement(), Rest} Parse string containing an XML document,将字符串列表,解析成XML树file(Filename::string()) -> {xmlElement(...转载 2018-06-23 10:29:57 · 912 阅读 · 0 评论 -
erlang第七天总结
1.异步acceptprim_inet:async_accept(LSock, -1) %请求异步accpet{inet_async, LSock, Ref, {ok, Sock}} %有连接来之后会有消息返回你刚刚调用上面函数的进程inet_db:register_socket(Sock, inet_tcp) %上面的消息到了之后要初始化下这个socket 后面就可以正常使用了详细用法如...原创 2018-06-02 09:43:52 · 911 阅读 · 0 评论 -
Erlang/OTP 构建 Application
在Erlang/OTP ,Application表示作为一个单元,可以启动和停止,执行一些特定功能的组件,并可以在其它系统中重新使用。Application控制器的模块接口,是在每一个Erlang运行时系统启动的进程,并包含用于控制Application(例如启动和停止Application),以及访问Application的信息(例如配置参数)的功能。Erlang/OTP Applicati...转载 2018-06-10 18:58:41 · 701 阅读 · 0 评论 -
[Erlang]List结构和性能分析
Erlang里通过尾递归方式对列表中元素依次进行操作时,程序员们采用的方法总是先在尾递归中将处理后的元素加在已处理列表的头部,最后通过lists:reverse(List)来恢复原来次序。为什么不直接以自然顺序将表头元素加到已处理列表的尾部呢?这里面都是有故事的。先看两个函数:1234567891011121314151617-module(list_time)....转载 2018-07-02 00:54:34 · 839 阅读 · 0 评论 -
lists优化,尾递归的重要一点
lists优化,尾递归的重要一点lists:flatten/1 builds an entirely new list. Therefore, it is expensive, and even more expensive than the ++ (which copies its left argument, but not its right argument).In the followi...转载 2018-07-02 00:57:15 · 221 阅读 · 0 评论 -
简单谈谈Erlang的几种运算符
Erlang 有好几种运算符,比较运算符、数学运算符、布尔运算符,文章针对这几种运算符做讨论,参考erlang文档,以例子说明。Erlang的比较运算符写法如下:Expr1 op Expr21> 1 == 1.trueopDescription==等于/=不等于=<小于或等于<小于>=大于或等于>大于=:=恒等于=/=恒不等于以=:=和...转载 2018-06-27 10:00:53 · 1911 阅读 · 0 评论 -
erlang第八天总结
1.lists:sort/2根据排序函数进行排序,如下面:SortFun1 = fun(A, B) -> if A == B -> true; true -> false end end,lists:sort(SortFun1, [5, 4, 2, 1, 3]).列表中的每个元素根据排序函数和其他元素进行比较,若为true,则不执行任何操作,若为false则交换两个元素的位置,...原创 2018-06-20 15:16:51 · 165 阅读 · 0 评论 -
Erlang服务端与微信登录和微信支付接口的交互
Erlang服务端与微信登录和微信支付接口的交互1. 先看看微信开放平台的官方开发文档:https://open.weixin.qq.com/ 如图:官方的微信登录和微信支付的API,给定的参数很详细。 2. 微信支付API的文档链接:https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_1微信登录API的文档链接:https...转载 2018-06-27 12:39:41 · 401 阅读 · 0 评论 -
[Erlang]数据粘包及packet详解
我们知道,erlang实现的网络服务器性能非常高。erlang的高效不在于短短几行代码就能写出一个服务端程序,而在于不用太多代码,也能够写出一个高效的服务端程序。而这一切的背后就是erlang对很多网络操作实现了近乎完美的封装,使得我们受益其中。文章将讨论erlang gen_tcp 数据连包问题及erlang的解决方案。数据连包问题,这个在client/server的通讯中很常见。就是,当cli...转载 2018-07-02 22:55:14 · 808 阅读 · 0 评论 -
erlang在{active, true}解决粘包问题
自己处理粘包的时候,使用{active, N}(还没有到被动模式)和{active, true}选项的时候,在handle_info({tcp,Socket,Data}里面需要好好处理下粘包,具体可以看下面的例子https://github.com/kqqsysu/ssdb-erlang/blob/master/src/ssdb_conn.erl...转载 2018-07-02 23:12:45 · 677 阅读 · 0 评论