<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mt4836的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mt4836</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mt4836]]></copyright><item><title><![CDATA[下载bee找不到bee.exe]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/125734823</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/125734823</guid><author>mt4836</author><pubDate>Tue, 12 Jul 2022 01:36:06 +0800</pubDate><description><![CDATA[bee安装报错记录]]></description><category></category></item><item><title><![CDATA[Lager使用说明]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/121867202</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/121867202</guid><author>mt4836</author><pubDate>Mon, 13 Dec 2021 15:44:00 +0800</pubDate><description><![CDATA[概述

Lager(开源)是Erlang的日志框架。它的目的是在erlang应用程序中提供一种更传统的方式来执行日志记录，这种方式可以很好地与logrotate和syslog等传统UNIX日志记录工具兼容。

特点

更细粒度的日志级别 (debug, info, notice, warning, error, critical, alert, emergency)(调试、信息、通知、警告、错误、关键、警报、紧急)
	Logger calls是使用parse transform进行转换，以允许捕获Modul]]></description><category></category></item><item><title><![CDATA[Cowboy2.8 - 函数参考]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115492616</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115492616</guid><author>mt4836</author><pubDate>Thu, 08 Apr 2021 15:35:15 +0800</pubDate><description><![CDATA[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...]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (二十四) - Performance]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115491919</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115491919</guid><author>mt4836</author><pubDate>Thu, 08 Apr 2021 15:34:49 +0800</pubDate><description><![CDATA[性能

本章描述了Cowboy的性能特征，并提供了提高应用程序性能的建议

每个连接一个进程

Cowboy 的第一个版本的特点是每个连接一个进程，而Cowboy 的当前版本的特点是每个连接一个进程加上每个请求一个进程。这对性能有负面影响，但为了为HTTP/1.1和HTTP/2(以及未来的HTTP版本)提供公共接口，这是必要的。

仍然可以对每个连接使用单个进程，并通过实现流处理程序来处理请求，从而避免为每个请求创建额外的进程。这可以针对所有请求，也可以仅针对单个端点，具体取决于应用程序的需求。

流处理程]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (二十三) - Middlewares]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115490747</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115490747</guid><author>mt4836</author><pubDate>Thu, 08 Apr 2021 15:34:18 +0800</pubDate><description><![CDATA[中间件

Cowboy将请求处理委托给中间件组件。默认情况下，定义了两个中间件，用于路由和处理请求，在本指南的大部分内容中有详细介绍。

中间件让您完全控制如何处理请求。您可以将自己的中间件添加到其中，或者根据需要完全更改中间件链。

Cowboy将按照给定的顺序执行所有中间件，除非其中一个决定停止处理。

用法

中间件只需要实现一个回调:execute/2。它在cowboy_middleware行为中定义。

这个回调函数有两个参数。第一个是Req对象。第二是环境问题。

中间件可以返回以下三种不同的值]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (二十二) - Streams]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115490602</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115490602</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 17:16:45 +0800</pubDate><description><![CDATA[流

流是一组形成HTTP请求/响应对的消息。

术语流来自HTTP/2。在Cowboy中，它也用于谈论HTTP/1.1或HTTP/1.0。它不应该与流请求或响应主体相混淆。

所有版本的HTTP都允许客户端发起流。HTTP/2是唯一一个允许服务器的协议，通过其服务器推送功能。客户端和服务器发起的流在Cowboy中都经过相同的过程。

流处理程序

流处理器必须实现五个不同的回调。其中4个是直接相关的;一个是特别的。

所有回调函数都会接收流ID作为第一个参数。

它们中的大多数都可以返回要由Cowboy执]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (二十一) - Websocket handlers]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115489148</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115489148</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 17:12:40 +0800</pubDate><description><![CDATA[Websocket 处理程序

Websocket处理程序提供了一个升级到Websocket的HTTP/1.1连接的接口，并在Websocket连接上发送或接收帧。

由于Websocket连接是通过HTTP/1.1升级机制建立的，所以Websocket处理器需要能够首先接收升级的HTTP请求，然后切换到Websocket并接管连接。然后，它们可以接收或发送Websocket帧，处理传入的Erlang消息或关闭连接。

升级

当接收到请求时，调用init/2回调函数。要建立Websocket连接，你必须切]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (二十) - The Websocket protocol]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115488531</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115488531</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 16:31:56 +0800</pubDate><description><![CDATA[Websocket协议

本章将解释什么是Websocket，以及为什么它是软实时Web应用程序的重要组件。

描述

Websocket是对HTTP的扩展，它模拟客户端(通常是Web浏览器)和服务器之间的纯TCP连接。它使用HTTP升级机制建立连接。

Websocket连接是完全异步的，不像HTTP/1.1(同步)和HTTP/2(异步，但是服务器只能发起流来响应请求)。使用Websocket，客户端和服务器都可以在任何时间发送帧而不受任何限制。它比任何HTTP协议都更接近TCP。

Websocket是]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十九)  -  设计资源处理程序]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115487699</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115487699</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 16:13:22 +0800</pubDate><description><![CDATA[设计资源处理程序

本章旨在为您提供一个问题列表，您必须回答这些问题才能编写一个好的资源处理器。它是一个可用的一步一步指南。

服务

服务会不可用吗?当它不可用时，我们能检测到它吗?例如，数据库连接问题可以及早检测到。我们也可能计划停用系统的全部或部分。实现service_available回调。

服务实现了哪些HTTP方法?我们需要更多的标准OPTIONS，HEAD, GET, PUT, POST, PATCH和DELETE吗?我们不用这些东西吗?实现known_methods回调函数。

资源处理程]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十八) - REST流程图]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115486814</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115486814</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 15:47:31 +0800</pubDate><description><![CDATA[REST 流程图

本章将通过许多不同的图来解释REST处理程序状态机。

请求可以遵循四种主要路径。一个用于方法OPTIONS;一个用于方法GET和HEAD;一为PUT、POST、PATCH方法;一个用于方法DELETE。

所有路径都从“开始”图开始，如果资源存在，那么除了选项路径之外的所有路径都会经过“内容协商”图，或者可以选择的“条件请求”图。

红色方块代表另一个图表。浅绿色方块表示响应。其他方块可能是Cowboy自己应答的一个问题或回调。如果回调函数未定义，绿色箭头往往指示默认行为。值旁边的星号]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十八) - REST 处理程序]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115486540</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115486540</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 15:24:05 +0800</pubDate><description><![CDATA[REST 处理程序

REST在Cowboy中作为一个子协议实现。请求被作为一个状态机处理，其中包含许多描述资源和修改机器行为的可选回调。

REST处理程序是处理HTTP请求的推荐方法。

初始化

首先，调用init/2回调函数。这个回调对所有处理程序都是通用的。为了在当前请求中使用REST，这个函数必须返回一个cowboy_rest元组。




init(Req, State) -&gt;
    {cowboy_rest, Req, State}.



然后Cowboy将切换到REST协议并开始]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十七) - REST 原理]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115486217</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115486217</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 15:16:15 +0800</pubDate><description><![CDATA[REST 原理

本章将尝试定义REST背后的概念，并解释什么使服务具有RESTful。

REST常常与根据HTTP方法执行不同的操作相混淆，同时使用的方法比GET和POST方法更多。这充其量是一种高度误导。

我们将首先尝试定义REST，并研究它在HTTP和Web上下文中的含义。要想更深入地解释REST，你可以阅读Roy T. Fielding's dissertation，因为它很好地解释了REST的来源和成就。

REST 架构

REST是一种客户机-服务器架构。客户端和服务器都有不同的关注点。.]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十六) -  Multipart requests]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115485735</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115485735</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 15:04:04 +0800</pubDate><description><![CDATA[multipart(多部件)请求

Multipart(多部件)源自MIME, MIME是一种扩展电子邮件格式的互联网标准。

multipart消息是一个部件列表。一个部件包含报头和主体。部件的主体可以是任何媒体类型，并包含文本或二进制数据。部件可以包含多部件媒体类型。

在HTTP上下文中，multipart最常与multipart/form-data媒体类型一起使用。浏览器使用它通过HTML表单上传文件。

multipart/byteranges也很常见。它是用于从资源发送任意字节的媒体类型，使客户]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十五) - Using cookies]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115485456</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115485456</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 14:51:35 +0800</pubDate><description><![CDATA[使用cookie

cookie是一种允许应用程序在无状态HTTP协议之上维护状态的机制。

cookie是一种name/value存储，其中的名称和值以纯文本形式存储。它们会在浏览器关闭或延迟后过期。它们可以配置在特定的域名或路径上，并限制为安全资源(通过HTTPS发送或下载)，或限制为服务器(不允许客户端脚本访问)。

Cookie名称实际上是区分大小写的。

cookie存储在客户端，并随着与存储它们的域和路径相匹配的每个后续请求一起发送，直到它们过期。这将产生不可忽略的成本。

不应该认为cooki]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十四) -  Sending a response]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115469792</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115469792</guid><author>mt4836</author><pubDate>Wed, 07 Apr 2021 14:43:33 +0800</pubDate><description><![CDATA[发送一个响应

必须使用Req对象发送响应。

Cowboy提供了两种不同的发送响应的方式:直接发送或通过流传递主体。响应报头和响应主体可以预先设置。一旦响应或流应答函数被调用，响应就被发送。

Cowboy还提供了一个发送文件的简化接口。它也只能发送文件的特定部分。

虽然每个请求只允许一个响应，但HTTP/2引入了一种机制，允许服务器推送与响应相关的额外资源。本章还描述了这个特性在Cowboy中的工作原理。

响应

Cowboy提供了三个函数来发送整个回复，这取决于您是否需要设置报头和正文。在任何情况]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十三) - Reading the request body]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115468592</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115468592</guid><author>mt4836</author><pubDate>Tue, 06 Apr 2021 20:18:46 +0800</pubDate><description><![CDATA[读取请求主体

可以使用Req对象读取请求主体。

Cowboy不会试图读取主体，除非有人要求。您需要调用主体读取函数来检索它。

Cowboy不会缓存主体，因此只能读取一次。

但是，你不需要阅读它。如果有主体存在但没有被读取，Cowboy会取消或跳过它的下载，这取决于协议。

Cowboy提供了一些函数来读取主体原始信息，并从urlencoded或多部分主体中读取和解析。后者在它自己的章节中有讨论。

请求主体的存在

并不是所有的请求都伴随着一个主体。你可以用这个函数来检查请求体是否存在:




c]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十二) - Request details]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115450019</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115450019</guid><author>mt4836</author><pubDate>Tue, 06 Apr 2021 19:30:27 +0800</pubDate><description><![CDATA[请求对象

Req对象是一个变量，用于获取关于请求的信息、读取请求体或发送响应。

在面向对象的意义上，它并不是一个真正的对象。它是一个简单的映射，可以在调用cowboy_req模块的函数时直接访问或使用。

Req对象是几个不同章节的主题。在本章中，我们将了解Req对象，并了解如何检索有关请求的信息。

Direct access

Req映射包含许多文档化的字段，可以直接访问这些字段。它们是直接映射到HTTP的字段:使用的HTTP版本;有效的URI组件方案、主机、端口、路径和qs请求头;连接对端地址和端]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十一) - Static files]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115434234</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115434234</guid><author>mt4836</author><pubDate>Sun, 04 Apr 2021 22:22:55 +0800</pubDate><description><![CDATA[静态文件

Cowboy附带了一个可用于提供静态文件的处理程序。它是为了方便在开发过程中提供文件。

对于生产中的系统，考虑使用市场上可用的多种内容分发网络(CDN)中的一种，因为它们是提供文件服务的最佳解决方案。

静态处理程序可以为给定目录中的一个文件或所有文件提供服务。可以配置etag生成和mime类型。

提供一个文件

您可以使用静态处理程序为应用程序私有目录中的特定文件提供服务。这对于提供索引特别有用。例如，当客户端请求/ path时。配置的路径是相对于给定应用程序的私有目录的。

下面的规则将]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (十) - Loop handlers]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115434068</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115434068</guid><author>mt4836</author><pubDate>Sun, 04 Apr 2021 22:02:00 +0800</pubDate><description><![CDATA[循环处理程序

循环处理程序是一种特殊的HTTP处理程序，当响应不能立即发送时使用。处理程序进入一个接收循环，等待正确的消息，然后才能发送响应。

循环处理程序用于响应可能不能立即可用，但您希望在响应到达时保持连接打开一段时间的请求。这种做法最著名的例子就是长轮询。

循环处理程序还可以用于响应部分可用且需要在连接打开时流化(stream)响应体的请求。这种实践最著名的例子是服务器发送事件(server-sent events)，但它也适用于任何需要很长时间发送的响应。

虽然使用普通HTTP处理程序也可以]]></description><category></category></item><item><title><![CDATA[Cowboy 用户指南 (九) - Handlers]]></title><link>https://blog.youkuaiyun.com/mt4836/article/details/115433919</link><guid>https://blog.youkuaiyun.com/mt4836/article/details/115433919</guid><author>mt4836</author><pubDate>Sun, 04 Apr 2021 21:50:51 +0800</pubDate><description><![CDATA[Handlers（处理程序）

处理程序是处理HTTP请求的Erlang模块。

普通的HTTP处理程序

Cowboy中最基本的处理程序实现了强制的init/2回调，操作请求，可选地发送响应，然后返回。

这个回调接收到Req对象和路由器配置中定义的初始状态。

一个不做任何事情的处理程序是这样的:




init(Req, State) -&gt;
    {ok, Req, State}.


尽管没有发送应答，一个204 No Content响应将发送到客户端，因为Cowboy确保为每个请求发送响]]></description><category></category></item></channel></rss>