历史记录
清空历史记录
    首页 > 电脑软件 > erlang程序设计第2版 Joe Armstrong pdf扫描版

    erlang程序设计第2版 Joe Armstrong pdf扫描版

    • 软件大小:13.57M
    • 软件版本:
    • 软件类型:国产软件
    • 软件分类:电脑软件
    • 软件语言:简体中文
    • 更新时间:2026-01-21
    • 安全检测:无插件360通过腾讯通过金山通过瑞星通过小红伞通过

    • 软件评分:

    普通下载

    手机扫一扫快捷方便下载

    使用Erlang构建高效网络服务器的分步指南

    步骤1:安装Erlang环境

    要开始使用Erlang进行开发,首先需要在你的计算机上安装Erlang运行时环境(ERTS)。

    1. 下载Erlang

    2. 安装Erlang

      • 下载完成后,按照安装向导完成安装。确保将Erlang添加到系统的环境变量中,以便在命令行中使用erl命令启动交互式外壳。
    3. 验证安装

      • 打开终端或命令提示符,输入erl命令启动Erlang的交互式外壳。如果成功进入REPL界面,则说明安装完成。

    步骤2:学习Erlang基础语法

    在开始编写网络服务器之前,必须掌握Erlang的基本语法和概念。

    1. 变量与模式匹配

      • Erlang使用变量前缀_(下划线)来表示不可变的变量。
        X = 5.
        
    2. 函数与模块

      • 函数定义需要包含模块名、函数名和参数列表。
        my_function() -> ok.
        
    3. 并发模型

      • Erlang使用轻量级进程(称为procs)来处理并发任务,每个进程都有自己的栈和变量空间。

    步骤3:了解OTP框架

    OTP(Open Telecom Platform)是Erlang的一个应用程序框架,用于构建可靠、可扩展的分布式系统。它提供了一系列行为模块,如gen_server,适合开发网络服务器。

    1. 安装OTP

      • OTP通常与Erlang一起安装,但也可以从Erlang官方仓库下载源码进行编译。
    2. 学习OTP核心概念

      • 理解应用程序结构、 supervisors(监督进程)和Behaviours(行为模块),这些是构建可靠系统的基石。

    步骤4:编写一个简单的Echo服务器

    通过编写一个Echo服务器,可以熟悉Erlang的套接字编程和并发处理机制。

    1. 创建新项目目录

      • 在终端中创建一个新的文件夹,用于存放你的Erlang项目。
    2. 编写服务器代码

      • 使用gen_server行为来实现服务器功能。下面是一个简单的Echo服务器示例:

        % server.erl
             
        -module(server).
        -behaviour(gen_server).
             
        %% API
         -export([start/0]).
             
        %% gen_server callbacks
         -export([init/1, handle_call/3, handle_cast/2, handle_info/2,
                 terminate/2, code_change/3]).
             
        start() ->
            gen_server:start([server], ?MODULE, [], []).
             
        init([]) ->
            {ok, #state{} = State} = supervisor:start_child(...),
            {ok, State}.
             
        handle_call(_Request, _From, State) ->
            Reply = echo_reply(),
            {reply, Reply, State}.
             
        handle_cast(_Msg, State) -> {noreply, State}.
        handle_info(_Info, State) -> {noreply, State}.
        terminate(_Reason, _State) -> ok.
        code_change(_OldVsn, State, _Extra) -> {ok, State}.
             
        echo_reply() ->
            io:format("Echo reply~n", []),
            "Echo received".
        
    3. 编译和运行服务器

      • 在Erlang外壳中,导航到项目目录,运行以下命令:
        c(server).
        server:start().
        
      • 该命令会启动你的Echo服务器进程。

    步骤5:测试服务器功能

    使用telnet或nc工具连接到服务器,发送一些数据进行测试。

    1. 打开终端

      • 输入以下命令连接到本地的8080端口:
        telnet localhost 8080
        
    2. 输入测试信息

      • 在telnet会话中输入一条消息,比如Hello, Erlang!, 按回车。
      • 服务器应该返回同样的内容作为响应。

    步骤6:优化与扩展服务器功能

    根据初步测试的结果,进行性能调优和功能扩展。

    1. 处理多个连接

      • 默认情况下,Erlang的gen_server可以处理多个请求。你可以添加日志语句来跟踪每个请求的处理情况。
    2. 状态管理

      • 在服务器模块中加入状态变量,记录当前连接数或已处理请求数量。
    3. 错误处理与恢复

      • 实现错误检测机制,并在出现问题时触发恢复逻辑,比如重新连接到数据库或重启部分服务。

    步骤7:使用OTP行为构建更复杂的服务器

    为了提高服务器的稳定性和可维护性,可以深入学习并使用更多的OTP行为模块。

    1. 使用supervisor结构

      • 创建一个 supervisors树来管理多个服务器进程,确保在某个子进程崩溃时能够自动恢复。
    2. 集成其他OTP组件

      • 引入gen_event处理异步事件,或使用gb_multi进行高效的组播通信。

    步骤8:监控与调试

    部署实时监控和日志记录工具,帮助及时发现和解决问题。

    1. 配置错误记录器

      • 在服务器模块中集成Erlang的错误记录器(error_logger),将关键信息写入日志文件。
    2. **使用调试工具`

      • 利用Erlang的调试器(如 dbg)跟踪程序执行流程,设置断点和观察变量状态。

    步骤9:测试与验证

    编写全面的单元测试和集成测试,确保服务器在各种情况下都能稳定运行。

    1. **单元测试`

      • 使用EUnit框架为每个函数和模块编写测试用例。
    2. **性能测试`

      • 使用工具如tsung进行压力测试,测量服务器的最大吞吐量和响应时间。

    步骤10:部署与维护

    将开发完成的服务器应用程序部署到生产环境,并建立定期监控和维护机制。

    1. **打包发行版本`

      • 使用rebar3等工具将项目依赖项和配置文件打包成可执行的发行版。
    2. **自动化部署`

      • 配置CI/CD管道,实现代码自动构建、测试和部署到目标环境。

    总结

    通过以上步骤,你可以系统地学习并掌握使用Erlang和OTP框架来编写高效可靠的网络服务器。从基础语法到复杂的行为模块应用,逐步积累经验和技能,最终能够开发出高性能的分布式系统。

    erlang程序设计第2版是一本Erlang程序设计书籍,由Erlang最初的设计者和实现者Joe Armstrong编著,牛化成翻译。本书是erlang程序设计的第二个版本。作者在第2版中做了重要更新,不但涵盖核心语言和框架的基本内容,还涉及rebar和cowboy这样的关键社区项目。有经验的Erlang程序员也能在书里找到各种有用的提示和新见解,初学者则会喜欢Joe在介绍和阐释关键语言概念时所使用的清楚和有条理的方式,欢迎免费下载阅读。

    内容介绍

    Erlang开源语言系出名门,通信巨头爱立信公司用它开发出了可靠性惊人的交换机系统AXD301。它天生就是面向并发、分布和高容错的,兼有函数式语言和脚本语言的各种优点,而且已经用于商业开发多年,具有稳定性极高的虚拟机和平台库。《erlang程序设计第2版》由Erlang之父Joe Armstrong编写,是毋庸置疑的经典著作。书中兼顾了顺序编程、并发编程和分布式编程,重点介绍如何编写并发和分布式的Erlang程序以及如何在多核CPU上自动加速程序,并深入地讨论了开发Erlang应用中至关重要的文件和网络编程、OTP、ETS和DETS等主题。第2版全新改写,反应了自第1版面世以来Erlang历经的所有变化,添加了大量针对初学者的内容,并在每章后都附上了练习题。非常适合Erlang初学者和中级水平Erlang程序员学习参考。

    章节目录

    第一部分 为何用Erlang
    第1章 什么是并发 2
    1.1 给并发建模 2
    1.1.1 开始模拟 3
    1.1.2 发送消息 4
    1.1.3 接收消息 4
    1.2 并发的益处 4
    1.3 并发程序和并行计算机 5
    1.4 顺序和并发编程语言 6
    1.5 小结 6
    第2章 Erlang速览 7
    2.1 Shell 7
    2.1.1 =操作符 8
    2.1.2 变量和原子的语法 8
    2.2 进程、模块和编译 9
    2.2.1 在shell里编译并运行Hello World 9
    2.2.2 在Erlang shell外编译 9
    2.3 你好,并发 10
    2.3.1 文件服务器进程 10
    2.3.2 客户端代码 13
    2.3.3 改进文件服务器 14
    2.4 练习 14
    第二部分 顺序编程
    第3章 基本概念 16
    3.1 启动和停止Erlang shell 16
    3.1.1 在shell里执行命令 17
    3.1.2 可能出错的地方 17
    3.1.3 在Erlang shell里编辑命令 18
    3.2 简单的整数运算 18
    3.3 变量 19
    3.3.1 Erlang的变量不会变 20
    3.3.2 变量绑定和模式匹配 20
    3.3.3 为什么一次性赋值让程序变得更好 21
    3.4 浮点数 22
    3.5 原子 22
    3.6 元组 23
    3.6.1 创建元组 24
    3.6.2 提取元组的值 25
    3.7 列表 26
    3.7.1 专用术语 26
    3.7.2 定义列表 27
    3.7.3 提取列表元素 27
    3.8 字符串 27
    3.9 模式匹配再探 29
    3.10 练习 30
    第4章 模块与函数 31
    4.1 模块是存放代码的地方 31
    4.1.1 常见错误 33
    4.1.2 目录和代码路径 33
    4.1.3 给代码添加测试 33
    4.1.4 扩展程序 34
    4.1.5 分号放哪里 36
    4.2 继续购物 36
    4.3 fun:基本的抽象单元 39
    4.3.1 以fun作为参数的函数 40
    4.3.2 返回fun的函数 41
    4.3.3 定义你自己的控制抽象 42
    4.4 简单列表处理 42
    4.5 列表推导 45
    4.5.1 Quicksort 46
    4.5.2 毕达哥拉斯三元数组 47
    4.5.3 回文构词 48
    4.6 内置函数 48
    4.7 关卡 49
    4.7.1 关卡序列 49
    4.7.2 关卡示例 50
    4.7.3 true关卡的作用 51
    4.8 case和if表达式 52
    4.8.1 case表达式 52
    4.8.2 if表达式 53
    4.9 构建自然顺序的列表 54
    4.10 归集器 55
    4.11 练习 56
    第5章 记录与映射组 57
    5.1 何时使用映射组或记录 57
    5.2 通过记录命名元组里的项 58
    5.2.1 创建和更新记录 59
    5.2.2 提取记录字段 59
    5.2.3 在函数里模式匹配记录 59
    5.2.4 记录是元组的另一种形式 60
    5.3 映射组:关联式键-值存储 60
    5.3.1 映射组语法 60
    5.3.2 模式匹配映射组字段 62
    5.3.3 操作映射组的内置函数 63
    5.3.4 映射组排序 64
    5.3.5 以JSON为桥梁 64
    5.4 练习 66
    第6章 顺序程序的错误处理 67
    6.1 处理顺序代码里的错误 67
    6.2 用try...catch捕捉异常错误 69
    6.2.1 try...catch具有一个值 69
    6.2.2 简写法 70
    6.2.3 try...catch编程样例 71
    6.3 用catch捕捉异常错误 72
    6.4 针对异常错误的编程样式 72
    6.4.1 改进错误消息 72
    6.4.2 经常返回错误时的代码 73
    6.4.3 错误可能有但罕见时的代码 73
    6.4.4 捕捉一切可能的异常错误 74
    6.5 栈跟踪 74
    6.6 抛错要快而明显,也要文明 75
    6.7 练习 75
    第7章 二进制型与位语法 76
    7.1 二进制型 76
    7.2 位语法 78
    7.2.1 打包和解包16位颜色 78
    7.2.2 位语法表达式 79
    7.2.3 位语法的真实例子 81
    7.3 位串:处理位级数据 85
    7.4 练习 87
    第8章 Erlang顺序编程补遗 88
    8.1 apply 89
    8.2 算术表达式 90
    8.3 元数 91
    8.4 属性 91
    8.4.1 预定义的模块属性 91
    8.4.2 用户定义的模块属性 93
    8.5 块表达式 94
    8.6 布尔值 94
    8.7 布尔表达式 95
    8.8 字符集 95
    8.9 注释 95
    8.10 动态代码载入 96
    8.11 Erlang的预处理器 99
    8.12 转义序列 99
    8.13 表达式和表达式序列 100
    8.14 函数引用 101
    8.15 包含文件 101
    8.16 列表操作:++和-- 102
    8.17 宏 102
    8.18 模式的匹配操作符 104
    8.19 数字 105
    8.19.1 整数 105
    8.19.2 浮点数 105
    8.20 操作符优先级 106
    8.21 进程字典 106
    8.22 引用 108
    8.23 短路布尔表达式 108
    8.24 比较数据类型 108
    8.25 元组模块 109
    8.26 下划线变量 109
    8.27 练习 110
    第9章 类型 111
    9.1 指定数据和函数类型 111
    9.2 Erlang的类型表示法 113
    9.2.1 类型的语法 113
    9.2.2 预定义类型 114
    9.2.3 指定函数的输入输出类型 114
    9.2.4 导出类型和本地类型 116
    9.2.5 不透明类型 116
    9.3 dialyzer教程 117
    9.3.1 错误使用内置函数的返回值 118
    9.3.2 内置函数的错误参数 119
    9.3.3 错误的程序逻辑 119
    9.3.4 使用dialyzer 120
    9.3.5 干扰dialyzer的事物 120
    9.4 类型推断与成功分型 121
    9.5 类型系统的局限性 123
    9.6 练习 125
    第10章 编译和运行程序 126
    10.1 改变开发环境 126
    10.1.1 设置载入代码的搜索路径 126
    10.1.2 在系统启动时执行一组命令 127
    10.2 运行程序的不同方式 128
    10.2.1 在Erlang shell里编译和运行 128
    10.2.2 在命令提示符界面里编译和运行 129
    10.2.3 作为Escript运行 130
    10.2.4 带命令行参数的程序 131
    10.3 用makefile使编译自动化 132
    10.4 当坏事发生 135
    10.4.1 停止Erlang 135
    10.4.2 未定义(缺失)的代码 135
    10.4.3 shell没有反应 136
    10.4.4 我的makefile不工作 137
    10.4.5 Erlang崩溃而你想阅读故障转储文件 137
    10.5 获取帮助 138
    10.6 调节运行环境 138
    10.7 练习 139
    第三部分 并发和分布式程序
    第11章 现实世界中的并发 142
    第12章 并发编程 145
    12.1 基本并发函数 145
    12.2 客户端-服务器介绍 147
    12.3 进程很轻巧 151
    12.4 带超时的接收 153
    12.4.1 只带超时的接收 154
    12.4.2 超时值为0的接收 154
    12.4.3 超时值为无穷大的接收 155
    12.4.4 实现一个定时器 155
    12.5 选择性接收 156
    12.6 注册进程 157
    12.7 关于尾递归的说明 158
    12.8 用MFA或Fun进行分裂 160
    12.9 练习 160
    第13章 并发程序中的错误 161
    13.1 错误处理的理念 161
    13.1.1 让其他进程修复错误 162
    13.1.2 任其崩溃 162
    13.1.3 为何要崩溃 162
    13.2 错误处理的术语含义 163
    13.3 创建连接 164
    13.4 同步终止的进程组 164
    13.5 设立防火墙 165
    13.6 监视 166
    13.7 基本错误处理函数 166
    13.8 容错式编程 167
    13.8.1 在进程终止时执行操作 167
    13.8.2 让一组进程共同终止 168
    13.8.3 生成一个永不终止的进程 169
    13.9 练习 170
    第14章 分布式编程 171
    14.1 两种分布式模型 171
    14.2 编写一个分布式程序 172
    14.3 创建名称服务器 173
    14.3.1 第1阶段:一个简单的名称服务器 173
    14.3.2 第2阶段:客户端在一个节点,服务器在相同主机的另一个节点 174
    14.3.3 第3阶段:同一局域网内不同机器上的客户端和服务器 175
    14.3.4 第4阶段:跨互联网不同主机上的客户端和服务器 176
    14.4 分布式编程的库和内置函数 177
    14.4.1 远程分裂示例 178
    14.4.2 文件服务器再探 180
    14.5 cookie保护系统 181
    14.6 基于套接字的分布式模型 182
    14.6.1 用lib_chan控制进程 182
    14.6.2 服务器代码 183
    14.7 练习 185
    第四部分 编程库与框架
    第15章 接口技术 188
    15.1 Erlang如何与外部程序通信 188
    15.2 用端口建立外部C程序接口 190
    15.2.1 C程序 191
    15.2.2 Erlang程序 193
    15.2.3 编译和链接端口程序 195
    15.2.4 运行程序 195
    15.3 在Erlang里调用shell脚本 196
    15.4 高级接口技术 196
    15.5 练习 197
    第16章 文件编程 198
    16.1 操作文件的模块 198
    16.2 读取文件的几种方法 199
    16.2.1 读取文件里的所有数据类型 199
    16.2.2 分次读取文件里的数据类型 200
    16.2.3 分次读取文件里的行 202
    16.2.4 读取整个文件到二进制型中 202
    16.2.5 通过随机访问读取文件 203
    16.3 写入文件的各种方式 205
    16.3.1 把数据列表写入文件 206
    16.3.2 把各行写入文件 207
    16.3.3 一次性写入整个文件 207
    16.3.4 写入随机访问文件 209
    16.4 目录和文件操作 209
    16.4.1 查找文件信息 210
    16.4.2 复制和删除文件 211
    16.5 其他信息 211
    16.6 一个查找工具函数 212
    16.7 练习 214
    第17章 套接字编程 216
    17.1 使用TCP 216
    17.1.1 从服务器获取数据 216
    17.1.2 一个简单的TCP服务器 219
    17.1.3 顺序和并行服务器 222
    17.1.4 注意事项 223
    17.2 主动和被动套接字 224
    17.2.1 主动消息接收(非阻塞式) 224
    17.2.2 被动消息接收(阻塞式) 225
    17.2.3 混合消息接收(部分阻塞式) 225
    17.3 套接字错误处理 226
    17.4 UDP 227
    17.4.1 最简单的UDP服务器与客户端 227
    17.4.2 一个UDP阶乘服务器 228
    17.4.3 UDP数据包须知 230
    17.5 对多台机器广播 230
    17.6 一个SHOUTcast服务器 231
    17.6.1 SHOUTcast协议 232
    17.6.2 SHOUTcast服务器的工作原理 232
    17.6.3 SHOUTcast服务器的伪代码 233
    17.6.4 运行SHOUTcast服务器 234
    17.7 练习 235
    第18章 用WebSocket和Erlang进行浏览 236
    18.1 创建一个数字时钟 237
    18.2 基本交互 239
    18.3 浏览器里的Erlang shell 240
    18.4 创建一个聊天小部件 241
    18.5 简化版IRC 244
    18.6 浏览器里的图形 247
    18.7 浏览器-服务器协议 249
    18.7.1 从Erlang发送消息到浏览器 249
    18.7.2 从浏览器到Erlang的消息 250
    18.8 练习 251
    第19章 用ETS和DETS存储数据 252
    19.1 表的类型 252
    19.2 影响ETS表效率的因素 254
    19.3 创建一个ETS表 255
    19.4 ETS示例程序 255
    19.4.1 三字母组合迭代函数 256
    19.4.2 创建一些表 257
    19.4.3 创建表所需的时间 258
    19.4.4 访问表所需的时间 258
    19.4.5 获胜者是…… 259
    19.5 保存元组到磁盘 260
    19.6 其余操作 262
    19.7 练习 263
    第20章 Mnesia:Erlang数据库 264
    20.1 创建初始数据库 264
    20.2 数据库查询 265
    20.2.1 选择表里的所有数据 266
    20.2.2 从表里选择数据 267
    20.2.3 从表里有条件选择数据 268
    20.2.4 从两个表里选择数据(联接) 268
    20.3 添加和移除数据库里的数据 269
    20.3.1 添加行 269
    20.3.2 移除行 270
    20.4 Mnesia事务 270
    20.4.1 中止事务 271
    20.4.2 载入测试数据 273
    20.4.3 do()函数 273
    20.5 在表里保存复杂数据 274
    20.6 表的类型和位置 275
    20.6.1 创建表 276
    20.6.2 常用的表属性组合 277
    20.6.3 表的行为 278
    20.7 表查看器 278
    20.8 深入挖掘 279
    20.9 练习 279
    第21章 性能分析、调试与跟踪 280
    21.1 Erlang代码的性能分析工具 281
    21.2 测试代码覆盖 281
    21.3 生成交叉引用 283
    21.4 编译器诊断信息 283
    21.4.1 头部不匹配 284
    21.4.2 未绑定变量 284
    21.4.3 未结束字符串 284
    21.4.4 不安全变量 284
    21.4.5 影子变量 285
    21.5 运行时诊断 286
    21.6 调试方法 287
    21.6.1 io:format调试 288
    21.6.2 转储至文件 289
    21.6.3 使用错误记录器 289
    21.7 Erlang调试器 289
    21.8 跟踪消息与进程执行 291
    21.9 Erlang代码的测试框架 294
    21.10 练习 295
    第22章 OTP介绍 296
    22.1 通用服务器之路 297
    22.1.1 Server 1:基本的服务器 297
    22.1.2 Server 2:实现事务的服务器 298
    22.1.3 Server 3:实现热代码交换的服务器 299
    22.1.4 Server 4:事务与热代码交换 301
    22.1.5 Server 5:更多乐趣 302
    22.2 gen_server入门 304
    22.2.1 确定回调模块名 304
    22.2.2 编写接口方法 305
    22.2.3 编写回调方法 305
    22.3 gen_server的回调结构 308
    22.3.1 启动服务器 308
    22.3.2 调用服务器 308
    22.3.3 调用和播发 309
    22.3.4 发给服务器的自发性消息 310
    22.3.5 后会有期,宝贝 310
    22.3.6 代码更改 311
    22.4 填写gen_server模板 311
    22.5 深入探索 313
    22.6 练习 313
    第23章 用OTP构建系统 315
    23.1 通用事件处理 316
    23.2 错误记录器 318
    23.2.1 记录错误 318
    23.2.2 配置错误记录器 319
    23.2.3 分析错误 323
    23.3 警报管理 324
    23.4 应用程序服务器 326
    23.4.1 质数服务器 326
    23.4.2 面积服务器 327
    23.5 监控树 328
    23.6 启动系统 331
    23.7 应用程序 335
    23.8 文件系统组织方式 336
    23.9 应用程序监视器 337
    23.10 怎样计算质数 338
    23.11 深入探索 340
    23.12 练习 341
    第五部分 构建应用程序
    第24章 编程术语 344
    24.1 保持Erlang世界观 344
    24.2 多用途服务器 346
    24.3 有状态的模块 348
    24.4 适配器变量 349
    24.5 表意编程 351
    24.6 练习 353
    第25章 第三方程序 354
    25.1 制作可共享代码存档并用rebar管理代码 354
    25.1.1 安装rebar 354
    25.1.2 在GitHub上创建一个新项目 355
    25.1.3 在本地克隆这个项目 355
    25.1.4 制作一个OTP应用程序 356
    25.1.5 宣传你的项目 356
    25.2 整合外部程序与我们的代码 357
    25.3 生成依赖项本地副本 358
    25.4 用cowboy构建嵌入式Web服务器 359
    25.5 练习 364
    第26章 多核CPU编程 366
    26.1 给Erlang程序员的好消息 367
    26.2 如何在多核CPU中使程序高效运行 367
    26.2.1 使用大量进程 368
    26.2.2 避免副作用 368
    26.2.3 避免顺序瓶颈 369
    26.3 让顺序代码并行 370
    26.4 小消息,大计算 372
    26.5 用mapreduce使计算并行化 376
    26.6 练习 380
    第27章 福尔摩斯的最后一案 381
    27.1 找出数据的相似度 381
    27.2 sherlock演示 382
    27.2.1 获取并预处理数据 382
    27.2.2 寻找最像给定文件的邮件 383
    27.2.3 搜索指定作者、日期或标题的邮件 385
    27.3 数据分区的重要性 386
    27.4 给邮件添加关键词 386
    27.4.1 词汇的重要性:TF*IDF权重 387
    27.4.2 余弦相似度:两个权重向量的相似程度 388
    27.4.3 相似度查询 389
    27.5 实现方式概览 389
    27.6 练习 390
    27.7 总结 391
    附录A OTP模板 392
    附录B 一个套接字应用程序 398
    附录C 一种简单的执行环境 413
    

    使用说明

    1、下载并解压,得出pdf文件

    2、如果打不开本文件,请务必下载pdf阅读器
    3、安装后,在打开解压得出的pdf文件
    4、双击进行阅读试读

    网友评论

    共有 0条评论

    captcha 评论需审核后才能显示

    应用推荐

    游戏推荐