如何 5 分钟用 elli 搭建你的第一个 Erlang HTTP 服务器:新手快速开始完整教程
如何 5 分钟用 elli 搭建你的第一个 Erlang HTTP 服务器新手快速开始完整教程【免费下载链接】elliSimple, robust and performant Erlang web server项目地址: https://gitcode.com/gh_mirrors/ell/elli想要用 Erlang 搭建一个HTTP 服务器很多新手第一反应是去啃 Cowboy 或 MochiWeb 的源码结果还没开始就劝退了。其实 Erlang 生态里有一个极其简单、健壮又高性能的轻量级 HTTP 服务器——elli。它专为 HTTP API 设计核心思想只有一个你只需要写一个回调模块剩下的连接管理、请求解析、并发处理全部交给它。本文将带你 5 分钟快速上手从零开始搭建并运行你的第一个 Erlang HTTP 服务器非常适合刚接触 Erlang Web 开发的新手。什么是 elli为什么新手首选它⚡elli 是一个简单、健壮且高性能的 Erlang Web 服务器官方定位是用于 HTTP API 的 Erlang 服务器。它最大的特点就是极简回调式设计你只需实现handle/2和handle_event/3两个函数就能处理所有请求。性能出色默认 20 个 acceptor 并发接受连接配合 Erlang 的进程模型轻松支撑高并发 API。依赖极少rebar.config 里deps为空几乎没有第三方依赖编译快、部署简单。功能够用支持 GET/POST 参数解析、自定义响应头、chunked 流式响应、sendfile 静态文件、SSL 加密、中间件扩展等。对比 Cowboy 这类功能全面的框架elli 更像一把手术刀——没有多余的东西砍掉一切你不需要的让你专注业务本身。快速开始前的环境准备 在动手之前请确认你的机器上已安装Erlang/OTP建议 20.0 以上版本终端执行erl能进入 Erlang shell 即可。make和gcc用于编译 Erlang 代码。git用于拉取项目源码。如果你还没有 Erlang可以通过系统包管理器或官方源码包安装整个过程约 2 分钟。安装完成后erl -version能看到版本号就说明环境就绪了。一键安装克隆并编译 elli 源码 环境就绪后我们开始安装。先把项目克隆到本地并编译git clone https://gitcode.com/gh_mirrors/ell/elli cd elli make compilemake compile实际上执行的是./rebar compile仓库自带了rebar可执行文件所以无需额外安装构建工具。编译成功后ebin/目录下会生成所有.beam文件这就意味着你的Erlang HTTP 服务器核心已经就绪了。想要验证代码质量还可以运行自带测试make eunit测试用例覆盖了elli_example_callback、HTTP 解析、中间件、SSL 等多个模块见test/目录全部通过说明安装没有任何问题。最快配置方法启动你的第一个 HTTP 服务器 编译完成后最快启动服务器的方式是利用 elli 自带的示例回调模块。在项目根目录启动 Erlang shellerl -pa ebin然后在 Erlang shell 中输入elli:start_link().就这么简单默认情况下elli:start_link/0会读取include/elli.hrl中定义的默认配置监听8080 端口回调模块为elli_example_callback。现在打开浏览器访问http://localhost:8080/hello/world→ 返回Hello World!http://localhost:8080/hello?nameElli→ 返回Hello Elli你的第一个 Erlang HTTP 服务器已经跑起来了 从安装到启动整个过程不超过 5 分钟。如果你需要自定义端口只需传入配置列表elli:start_link([{callback, elli_example_callback}, {callback_args, []}, {port, 9000}]).elli:start_link/1的核心入口定义在src/elli.erl它会创建监听 socket、启动 acceptor 进程池并在启动时回调你的handle_event(elli_startup, ...)方便你初始化 ETS 表或辅助进程。编写你的第一个 HTTP 回调模块 ✍️默认的elli_example_callback只是示例生产环境你需要写自己的回调。ellie 的约定非常清晰实现elli_handler行为提供handle/2和handle_event/3两个函数。新建一个my_callback.erl文件-module(my_callback). -behaviour(elli_handler). -export([handle/2, handle_event/3]). -include(include/elli.hrl). handle(Req, _Args) - handle(elli_request:method(Req), elli_request:path(Req), Req). handle(GET, [ping], _Req) - {ok, [], pong}; handle(GET, [hello, Name], _Req) - {ok, [{Content-Type, text/plain}], Hello , Name/binary}; handle(_, _, _Req) - {404, [], Not Found}. handle_event(_Event, _Args, _Config) - ok.然后编译并启动c(my_callback). elli:start_link([{callback, my_callback}, {callback_args, []}, {port, 8080}]).访问http://localhost:8080/ping即可得到pong。这个最小示例展示了 elli 的核心模式elli_request:path/1会把 URL 路径按/切分成二进制列表方便你写路由匹配子句。响应格式为{状态码或ok, 响应头列表, 响应体}响应体可以是 binary 或 iolist。常用接口开发技巧参数、请求头与响应 新手开发 API 时最常用到的能力elli 的elli_request模块几乎都提供了获取 URL 查询参数Name elli_request:get_arg(name, Req, undefined), %% 需要 URL 解码时用 get_arg_decoded/3获取 POST 表单参数Name elli_request:post_arg(name, Req, undefined), City elli_request:post_arg_decoded(city, Req, undefined),读取请求头Accept elli_request:get_header(Accept, Req, text/plain),返回自定义响应头与状态码{201, [{X-Custom, foobar}], created}, {304, [{Etag, abc}], }具体实现都可以在src/elli_request.erl中找到每个函数的用途一目了然。需要提醒的是返回{304, ...}时 elli 会自动忽略响应体非常适合做缓存协商。进阶玩法中间件、gzip 压缩与流式响应 当你的 API 需要鉴权、日志、压缩等横切能力时elli 提供了优雅的中间件机制。中间件链通过elli_middleware组合多个处理模块比如官方示例中把压缩中间件和业务回调串起来Config [{mods, [ {elli_middleware_compress, []}, {my_callback, []} ]}], elli:start_link([{callback, elli_middleware}, {callback_args, Config}, {port, 8080}]).配置好elli_middleware_compress后超过 1024 字节的响应体会被自动 gzip 压缩大幅降低带宽消耗而你的业务代码完全无感知。chunked 流式响应如果要做实时推送如 SSEelli 支持分块发送。核心用法是拿到chunk_ref后异步发送数据Ref elli_request:chunk_ref(Req), spawn(fun() - elli_request:send_chunk(Ref, [chunk1]), elli_request:send_chunk(Ref, [chunk2]), elli_request:close_chunk(Ref) end), {chunk, [{Content-Type, text/event-stream}]}静态文件与 Range 支持返回{file, /path/to/file}即可让 elli 用 sendfile 发送文件配合elli_util:normalize_range/2还能直接支持 HTTP Range 断点续传这在提供下载服务时非常实用。单元测试你的回调逻辑 ✅elli 内置了测试辅助模块elli_test可以不启动服务器直接调用你的回调极大方便了单元测试elli_test:call(GET, /ping, [], , [{callback, my_callback}, {callback_args, []}]).返回的#req{}记录中包含了回调的返回值配合 EUnit 断言即可完成测试。项目自带的test/elli_tests.erl等测试文件都是很好的参考范例。写在最后 通过本文你应该已经掌握用 5 分钟克隆编译 elli、通过默认配置快速启动、编写自己的回调模块、解析参数与请求头、使用中间件和流式响应以及编写单元测试。elli 的代码量很小src/目录下只有十几个.erl文件当你遇到问题或想深入原理时直接阅读源码就是最好的文档。还等什么马上动手搭建属于你的第一个 Erlang HTTP 服务器吧【免费下载链接】elliSimple, robust and performant Erlang web server项目地址: https://gitcode.com/gh_mirrors/ell/elli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2019款大众宝来深度解析:MQB平台升级与动力配置如何重塑国民家轿

2019款大众宝来深度解析:MQB平台升级与动力配置如何重塑国民家轿

1. 从“驾驶者之车”到“国民家轿”的转身2019年,当一汽-大众宣布新款宝来以11.28万元至15.98万元的价格区间正式上市时,市场并没有感到太多意外,但从业内视角看,这背后是一次非常典型的“精准卡位”操作。宝来这个名字&#xff0…

2026/10/30 11:42:05 阅读更多 →
lift-oQ4性能深度解析:100 tokens/s背后混合注意力架构与benchmark解读

lift-oQ4性能深度解析:100 tokens/s背后混合注意力架构与benchmark解读

lift-oQ4性能深度解析:100 tokens/s背后混合注意力架构与benchmark解读 【免费下载链接】lift-oQ4 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/lift-oQ4 lift-oQ4 是一个面向文档结构化提取的 9B 视觉语言模型,基于 Qwen3.5&am…

2026/10/23 18:34:08 阅读更多 →
Ventoy 使用指南:如何用一个 U 盘启动所有系统,彻底告别反复格式化

Ventoy 使用指南:如何用一个 U 盘启动所有系统,彻底告别反复格式化

Ventoy 使用指南:如何用一个 U 盘启动所有系统,彻底告别反复格式化 【免费下载链接】Ventoy A new bootable USB solution. 项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy 先问一个反常识的问题:一个 64GB 的 U 盘&#x…

2026/10/25 10:42:34 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/30 0:01:36 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/30 9:20:34 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/30 10:19:21 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/30 0:01:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/30 10:19:39 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/30 9:21:37 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/29 17:01:10 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 10:28:40 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/30 0:01:33 阅读更多 →