![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
erlang
文章平均质量分 73
mt4836
走别人的路,让别人无路可走
展开
-
Erlang性能误区 otp23.2
The Seven Myths of Erlang PerformanceErlang的七个性能误区otp23.2http://erlang.org/doc/efficiency_guide/myths.html1 Myth: Tail-Recursive Functions are Much Faster Than Recursive Functions误区1:尾递归函数比递归函数快得多According to the myth, using a tail-recursive fu..翻译 2021-02-05 16:55:34 · 392 阅读 · 0 评论 -
Lager使用说明
概述Lager(开源)是Erlang的日志框架。它的目的是在erlang应用程序中提供一种更传统的方式来执行日志记录,这种方式可以很好地与logrotate和syslog等传统UNIX日志记录工具兼容。特点更细粒度的日志级别 (debug, info, notice, warning, error, critical, alert, emergency)(调试、信息、通知、警告、错误、关键、警报、紧急) Logger calls是使用parse transform进行转换,以允许捕获Modul原创 2021-12-13 15:44:00 · 1704 阅读 · 0 评论 -
Cowboy2.8 - 函数参考
Cowboy函数参考名称cowboy -小型、快速、现代的Erlang/OTP HTTP服务器描述Cowboy是Erlang/OTP的HTTP服务器,支持HTTP/1.1、HTTP/2和Websocket协议。Cowboy的目标是提供一个完整的HTTP栈。这包括HTTP rfc的实现,也包括任何直接相关的标准,如Websocket或Server-Sent Events。模块函数:cowboy(3)-监听器管理 cowboy_req(3)- 请求和响应 cowboy...原创 2021-04-08 15:35:15 · 207 阅读 · 0 评论 -
Cowboy 用户指南 (二十四) - Performance
性能本章描述了Cowboy的性能特征,并提供了提高应用程序性能的建议每个连接一个进程Cowboy 的第一个版本的特点是每个连接一个进程,而Cowboy 的当前版本的特点是每个连接一个进程加上每个请求一个进程。这对性能有负面影响,但为了为HTTP/1.1和HTTP/2(以及未来的HTTP版本)提供公共接口,这是必要的。仍然可以对每个连接使用单个进程,并通过实现流处理程序来处理请求,从而避免为每个请求创建额外的进程。这可以针对所有请求,也可以仅针对单个端点,具体取决于应用程序的需求。流处理程原创 2021-04-08 15:34:49 · 181 阅读 · 0 评论 -
Cowboy 用户指南 (二十三) - Middlewares
中间件Cowboy将请求处理委托给中间件组件。默认情况下,定义了两个中间件,用于路由和处理请求,在本指南的大部分内容中有详细介绍。中间件让您完全控制如何处理请求。您可以将自己的中间件添加到其中,或者根据需要完全更改中间件链。Cowboy将按照给定的顺序执行所有中间件,除非其中一个决定停止处理。用法中间件只需要实现一个回调:execute/2。它在cowboy_middleware行为中定义。这个回调函数有两个参数。第一个是Req对象。第二是环境问题。中间件可以返回以下三种不同的值原创 2021-04-08 15:34:18 · 176 阅读 · 0 评论 -
Cowboy 用户指南 (二十二) - Streams
流流是一组形成HTTP请求/响应对的消息。术语流来自HTTP/2。在Cowboy中,它也用于谈论HTTP/1.1或HTTP/1.0。它不应该与流请求或响应主体相混淆。所有版本的HTTP都允许客户端发起流。HTTP/2是唯一一个允许服务器的协议,通过其服务器推送功能。客户端和服务器发起的流在Cowboy中都经过相同的过程。流处理程序流处理器必须实现五个不同的回调。其中4个是直接相关的;一个是特别的。所有回调函数都会接收流ID作为第一个参数。它们中的大多数都可以返回要由Cowboy执原创 2021-04-07 17:16:45 · 188 阅读 · 0 评论 -
Cowboy 用户指南 (二十一) - Websocket handlers
Websocket 处理程序Websocket处理程序提供了一个升级到Websocket的HTTP/1.1连接的接口,并在Websocket连接上发送或接收帧。由于Websocket连接是通过HTTP/1.1升级机制建立的,所以Websocket处理器需要能够首先接收升级的HTTP请求,然后切换到Websocket并接管连接。然后,它们可以接收或发送Websocket帧,处理传入的Erlang消息或关闭连接。升级当接收到请求时,调用init/2回调函数。要建立Websocket连接,你必须切原创 2021-04-07 17:12:40 · 705 阅读 · 0 评论 -
Cowboy 用户指南 (二十) - The Websocket protocol
Websocket协议本章将解释什么是Websocket,以及为什么它是软实时Web应用程序的重要组件。描述Websocket是对HTTP的扩展,它模拟客户端(通常是Web浏览器)和服务器之间的纯TCP连接。它使用HTTP升级机制建立连接。Websocket连接是完全异步的,不像HTTP/1.1(同步)和HTTP/2(异步,但是服务器只能发起流来响应请求)。使用Websocket,客户端和服务器都可以在任何时间发送帧而不受任何限制。它比任何HTTP协议都更接近TCP。Websocket是原创 2021-04-07 16:31:56 · 278 阅读 · 0 评论 -
Cowboy 用户指南 (十九) - 设计资源处理程序
设计资源处理程序本章旨在为您提供一个问题列表,您必须回答这些问题才能编写一个好的资源处理器。它是一个可用的一步一步指南。服务服务会不可用吗?当它不可用时,我们能检测到它吗?例如,数据库连接问题可以及早检测到。我们也可能计划停用系统的全部或部分。实现service_available回调。服务实现了哪些HTTP方法?我们需要更多的标准OPTIONS,HEAD, GET, PUT, POST, PATCH和DELETE吗?我们不用这些东西吗?实现known_methods回调函数。资源处理程原创 2021-04-07 16:13:22 · 188 阅读 · 0 评论 -
Cowboy 用户指南 (十八) - REST流程图
REST 流程图本章将通过许多不同的图来解释REST处理程序状态机。请求可以遵循四种主要路径。一个用于方法OPTIONS;一个用于方法GET和HEAD;一为PUT、POST、PATCH方法;一个用于方法DELETE。所有路径都从“开始”图开始,如果资源存在,那么除了选项路径之外的所有路径都会经过“内容协商”图,或者可以选择的“条件请求”图。红色方块代表另一个图表。浅绿色方块表示响应。其他方块可能是Cowboy自己应答的一个问题或回调。如果回调函数未定义,绿色箭头往往指示默认行为。值旁边的星号原创 2021-04-07 15:47:31 · 479 阅读 · 0 评论 -
Cowboy 用户指南 (十八) - REST 处理程序
REST 处理程序REST在Cowboy中作为一个子协议实现。请求被作为一个状态机处理,其中包含许多描述资源和修改机器行为的可选回调。REST处理程序是处理HTTP请求的推荐方法。初始化首先,调用init/2回调函数。这个回调对所有处理程序都是通用的。为了在当前请求中使用REST,这个函数必须返回一个cowboy_rest元组。init(Req, State) -> {cowboy_rest, Req, State}.然后Cowboy将切换到REST协议并开始原创 2021-04-07 15:24:05 · 220 阅读 · 0 评论 -
Cowboy 用户指南 (十七) - REST 原理
REST 原理本章将尝试定义REST背后的概念,并解释什么使服务具有RESTful。REST常常与根据HTTP方法执行不同的操作相混淆,同时使用的方法比GET和POST方法更多。这充其量是一种高度误导。我们将首先尝试定义REST,并研究它在HTTP和Web上下文中的含义。要想更深入地解释REST,你可以阅读Roy T. Fielding's dissertation,因为它很好地解释了REST的来源和成就。REST 架构REST是一种客户机-服务器架构。客户端和服务器都有不同的关注点。.原创 2021-04-07 15:16:15 · 302 阅读 · 1 评论 -
Cowboy 用户指南 (十六) - Multipart requests
multipart(多部件)请求Multipart(多部件)源自MIME, MIME是一种扩展电子邮件格式的互联网标准。multipart消息是一个部件列表。一个部件包含报头和主体。部件的主体可以是任何媒体类型,并包含文本或二进制数据。部件可以包含多部件媒体类型。在HTTP上下文中,multipart最常与multipart/form-data媒体类型一起使用。浏览器使用它通过HTML表单上传文件。multipart/byteranges也很常见。它是用于从资源发送任意字节的媒体类型,使客户原创 2021-04-07 15:04:04 · 218 阅读 · 0 评论 -
Cowboy 用户指南 (十五) - Using cookies
使用cookiecookie是一种允许应用程序在无状态HTTP协议之上维护状态的机制。cookie是一种name/value存储,其中的名称和值以纯文本形式存储。它们会在浏览器关闭或延迟后过期。它们可以配置在特定的域名或路径上,并限制为安全资源(通过HTTPS发送或下载),或限制为服务器(不允许客户端脚本访问)。Cookie名称实际上是区分大小写的。cookie存储在客户端,并随着与存储它们的域和路径相匹配的每个后续请求一起发送,直到它们过期。这将产生不可忽略的成本。不应该认为cooki原创 2021-04-07 14:51:35 · 176 阅读 · 0 评论 -
Cowboy 用户指南 (十四) - Sending a response
发送一个响应必须使用Req对象发送响应。Cowboy提供了两种不同的发送响应的方式:直接发送或通过流传递主体。响应报头和响应主体可以预先设置。一旦响应或流应答函数被调用,响应就被发送。Cowboy还提供了一个发送文件的简化接口。它也只能发送文件的特定部分。虽然每个请求只允许一个响应,但HTTP/2引入了一种机制,允许服务器推送与响应相关的额外资源。本章还描述了这个特性在Cowboy中的工作原理。响应Cowboy提供了三个函数来发送整个回复,这取决于您是否需要设置报头和正文。在任何情况原创 2021-04-07 14:43:33 · 295 阅读 · 0 评论 -
Cowboy 用户指南 (十三) - Reading the request body
读取请求主体可以使用Req对象读取请求主体。Cowboy不会试图读取主体,除非有人要求。您需要调用主体读取函数来检索它。Cowboy不会缓存主体,因此只能读取一次。但是,你不需要阅读它。如果有主体存在但没有被读取,Cowboy会取消或跳过它的下载,这取决于协议。Cowboy提供了一些函数来读取主体原始信息,并从urlencoded或多部分主体中读取和解析。后者在它自己的章节中有讨论。请求主体的存在并不是所有的请求都伴随着一个主体。你可以用这个函数来检查请求体是否存在:c原创 2021-04-06 20:18:46 · 293 阅读 · 0 评论 -
Cowboy 用户指南 (十二) - Request details
请求对象Req对象是一个变量,用于获取关于请求的信息、读取请求体或发送响应。在面向对象的意义上,它并不是一个真正的对象。它是一个简单的映射,可以在调用cowboy_req模块的函数时直接访问或使用。Req对象是几个不同章节的主题。在本章中,我们将了解Req对象,并了解如何检索有关请求的信息。Direct accessReq映射包含许多文档化的字段,可以直接访问这些字段。它们是直接映射到HTTP的字段:使用的HTTP版本;有效的URI组件方案、主机、端口、路径和qs请求头;连接对端地址和端原创 2021-04-06 19:30:27 · 696 阅读 · 0 评论 -
Cowboy 用户指南 (十一) - Static files
静态文件Cowboy附带了一个可用于提供静态文件的处理程序。它是为了方便在开发过程中提供文件。对于生产中的系统,考虑使用市场上可用的多种内容分发网络(CDN)中的一种,因为它们是提供文件服务的最佳解决方案。静态处理程序可以为给定目录中的一个文件或所有文件提供服务。可以配置etag生成和mime类型。提供一个文件您可以使用静态处理程序为应用程序私有目录中的特定文件提供服务。这对于提供索引特别有用。例如,当客户端请求/ path时。配置的路径是相对于给定应用程序的私有目录的。下面的规则将原创 2021-04-04 22:22:55 · 268 阅读 · 0 评论 -
Cowboy 用户指南 (十) - Loop handlers
循环处理程序循环处理程序是一种特殊的HTTP处理程序,当响应不能立即发送时使用。处理程序进入一个接收循环,等待正确的消息,然后才能发送响应。循环处理程序用于响应可能不能立即可用,但您希望在响应到达时保持连接打开一段时间的请求。这种做法最著名的例子就是长轮询。循环处理程序还可以用于响应部分可用且需要在连接打开时流化(stream)响应体的请求。这种实践最著名的例子是服务器发送事件(server-sent events),但它也适用于任何需要很长时间发送的响应。虽然使用普通HTTP处理程序也可以原创 2021-04-04 22:02:00 · 148 阅读 · 0 评论 -
Cowboy 用户指南 (九) - Handlers
Handlers(处理程序)处理程序是处理HTTP请求的Erlang模块。普通的HTTP处理程序Cowboy中最基本的处理程序实现了强制的init/2回调,操作请求,可选地发送响应,然后返回。这个回调接收到Req对象和路由器配置中定义的初始状态。一个不做任何事情的处理程序是这样的:init(Req, State) -> {ok, Req, State}.尽管没有发送应答,一个204 No Content响应将发送到客户端,因为Cowboy确保为每个请求发送响原创 2021-04-04 21:50:51 · 203 阅读 · 0 评论 -
Cowboy 用户指南 (八) - Constraints
约束约束是用来验证和转换用户输入的函数。它们被用于Cowboy中的各个地方,包括路由器和cowboy_req匹配函数。语法约束以字段列表的形式提供。对于列表中的每个字段,可以应用特定的约束,如果字段缺失,还可以应用默认值。字段可以是一个atom的字段、一个带约束的{field, constraints}元组或一个带约束(默认值为{field, constraints, default})的元组。字段形式表示该字段为必选字段。注意,当与路由器一起使用时,只有第二种形式才有意义,因为它不原创 2021-04-04 21:40:11 · 229 阅读 · 0 评论 -
Cowboy 用户指南 (七) - Routing
路由Cowboy 默认不执行任何操作.要使Cowboy有用,需要将URI映射到负责处理请求的Erlang模块。这被称为路由。URI,统一资源标志符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。Cowboy使用以下算法路由请求:如果没有配置的主机与请求URI匹配,则返回400响应。 否则,将使用第一个配置的和请求URI匹配的主机。只考虑为该主机配置的路径。 如果上原创 2021-04-04 21:27:33 · 427 阅读 · 0 评论 -
Cowboy 用户指南 (六) - Listeners
监听器监听器是一组在端口上监听新连接的进程。传入的连接由Cowboy处理。连接握手,可以使用一种或另一种协议。这一章是针对Cowboy的。有关监听器的更多信息,请参阅Ranch User Guide。Cowboy提供了两种类型的监听器:一种监听clearTCP连接,另一种监听安全的TLS连接。它们都支持HTTP/1.1和HTTP/2协议。Clear TCP 监听器clearTCP监听器将接受给定端口上的连接。典型的HTTP服务器将监听端口80。然而,端口80在大多数平台上需要特殊的权..原创 2021-04-02 16:39:56 · 443 阅读 · 3 评论 -
Cowboy 用户指南 (四) - Getting started
入门指南Erlang不仅仅是一种语言,它还是应用程序的操作系统。Erlang开发人员很少编写独立的模块,他们编写库或应用程序,然后将它们捆绑到所谓的发布中。发布版包含Erlang VM以及运行该节点所需的所有应用程序,因此可以直接将其push到生产环境。本章将带领您完成设置Cowboy、编写第一个应用程序和生成第一个发行版的所有步骤。在本章的最后,你应该知道将你的第一个Cowboy应用push到产品所需的一切。预备知识我们将使用Erlang.mk来构建系统。如果您正在使用Windows,请阅原创 2021-04-02 15:43:11 · 290 阅读 · 0 评论 -
Cowboy 用户指南 (五) - Flow diagram
流程图Cowboy是一个轻量级的HTTP服务器,支持HTTP/1.1、HTTP/2和Websocket。它建立在Ranch的基础上。有关如何处理网络连接的更多信息,请参阅Ranch指南。Overview正如您在图中看到的,客户端首先连接到服务器。这个步骤由Ranch acceptor处理,这是一个专门用于接受新连接的进程。Ranch接受新连接后,无论是HTTP/1.1还是HTTP/2连接,Cowboy都会开始接收并处理请求。在HTTP/1.1中,所有的请求都是顺序来的。在HTTP原创 2021-04-02 16:10:14 · 303 阅读 · 0 评论 -
Cowboy 用户指南 (三) - Introduction
介绍Cowboy是面向Erlang/OTP的小型、快速、现代的HTTP服务器Cowboy的目标是提供一个完整的现代Web堆栈。这包括HTTP/1.1, HTTP/2, Websocket,Server-Sent Events和Webmachine-based REST。Cowboy提供了内省和跟踪功能,使开发人员能够在任何时候准确地知道发生了什么。它的模块化设计也使开发人员能够轻松地添加工具。Cowboy是一个高质量的工程。它有一个小的代码库,非常高效(在延迟和内存使用方面),并且可以很容易原创 2021-04-02 15:19:23 · 512 阅读 · 0 评论 -
Nine Nines Cowboy用户指南
Cowboy 用户指南基本原理现代网络The modern Web Erlang 和 WebErlang and the Web介绍介绍-Introduction 入门指南 -Getting started 流程图-Flow diagram配置监听器Listeners 路由-Routing 约束 -ConstraintsHandlers(处理器)处理器-Handlers 循环处理器-Loop handlers 静态文件-Static files...原创 2021-04-01 16:52:15 · 221 阅读 · 0 评论 -
Erlang旧误区记录
以前的误区误区1:Funs运行速度很慢fun曾经非常慢,比apply/3慢。最初,fun的实现仅仅是使用编译器的技巧、普通元组、apply/3以及大量的约定。但那是历史。在R6B中,fun被赋予了自己的数据类型,并在R7B中进行了进一步的优化。现在,一个fun调用的消耗大约在普通的函数调用和apply/3之间。误区2:列表解析很慢列表解析过去是使用fun来实现的,在过去,fun确实很慢。现在,编译器将列表推导式重写为普通的递归函数。使用尾部递归函数并在末尾执行反向操作会更快。还是吗.原创 2021-02-05 17:58:19 · 98 阅读 · 0 评论 -
Erlang的常见警告
本节列出了一些需要注意的模块和bif,不仅仅是从性能的角度。3.1 定时器模块使用erlang:send_after/3和erlang:start_timer/3创建计时器要比使用STDLIB中的计时器模块提供的计时器高效得多。计时器模块使用一个单独的进程来管理计时器。如果许多进程频繁地创建和取消计时器(特别是在使用SMP仿真器时),该进程很容易超载。timer模块中的函数不管理定时器(如timer:tc/3或timer:sleep/1),不调用timer-server进程,因此是无害的。.原创 2021-02-05 17:26:02 · 219 阅读 · 0 评论 -
Erlang lib_chan 源码
转自:http://blog.csdn.net/wwh578867817/article/details/49935199lib_chan 是《Programming Erlang》 作者写的一种构建分布式系统的组件,思想很值得学习。 刚开始学习 Erlang,感觉编写代码的风格不是很适应,但感觉思想非常 nice。 看到书的中间部分用到了它,不想用的不明不白,所以打算阅读下,并做转载 2017-01-10 12:52:44 · 606 阅读 · 0 评论 -
Erlang 中的并发 -- Actor 模型
转载自:http://blog.csdn.net/wwh578867817/article/details/49774169首先,我们聊聊现实世界中的并发。我曾经举过一个并发和并行的例子:老妈在很短的时间给我安排了很多任务,吃包子,拖地,洗碗…等等 由于我母亲大人比较严厉,所以我“愉快”地接受了所有任务。 这就是所谓的并发,在某一时段,能接受的事件。转载 2017-01-10 12:50:20 · 370 阅读 · 0 评论 -
erlang binary:match和binary:matches接口简易区分
binary:match和binary:matches的对比match的接口返回的是符合字符串中第一个匹配到的字母的{下标,词组长度}举例binary:match("abcde">>, ["bcde">>, "a">>]).会返回{0,1},0代表原字符串中第一个匹配到的字母下标("abcde"中的'a'下标为0),1是匹配到的数组长度,下标相同的按字符串长度比较binary:原创 2016-10-22 12:35:14 · 730 阅读 · 0 评论 -
erlang 排序算法
-module(sort).-author("Administrator").%%API-export([buddle/2,selection/1,quick/1,insert/1,merge/1,bubbles/1]).%% 冒泡算法:每次step得到一个最大值,对余下的列表再进行递归调用buddle([], SortedList) -> SortedList;buddle(Li原创 2016-08-06 18:50:41 · 1257 阅读 · 0 评论 -
erlang常见基础
每一个文件通常称为一个模块(module),需要特别注意的是在这一行末尾的”.”,这个是不可或缺的。每一个模块的名称必须和它的文件名一样注意这里的结尾是”;”,表明这个方法还没有结束在函数中的参数”N,X,Y”我们称之为变量。变量的首字母需要大写常量是Erlang的另一种数据类型。常量以小写字母开头常量就是一个简单的名字,不像变量一样拥有值。在Erl转载 2016-08-03 19:33:10 · 606 阅读 · 0 评论