具体描述
本书从最底层的概念开始,然后是高层的Ruby包装器,最后涉及到更复杂的内容。最初你会学到如何使用Ruby所提供的底层调用来创建套接字,随后将会看到服务器以及客户端的bind/listen/accept或bind/connect方法的生命周期。接下来将学习到如何使用Ruby中的各种高级包装器类,以避开繁杂的旁枝末节。
本书的中间部分包含了一些高级课题,例如如何正确地实现套接字超时、SSL套接字、缓冲等。最后部分通过使用不同的并发模式来多次实现一个FTP服务器,从而将所有的理论知识应用于实践。
服务器和客户端的生命周期。
使用Ruby在合适的时机,以各种方式读取并写入数据。
提高Socket性能的一些方法。
SSL Sockets基础知识。
实现并发网络的6种架构模式。
连接复用、非阻塞IO、Sockets超时和Sockets选项,等等。
作者简介
作者简介:
Jesse Storimer
高级软件工程师与自出版作家,服务于美国电子商务方案提供商Shopify。痴迷于编程,编程之余喜欢阅读、园艺以及徒步旅行等户外运动。除了经常写技术博客文章外,他还著有Working with Unix Processes,Working with Ruby Threads两本颇有影响力的电子书。
译者简介:
门佳
Unix/Linux shell、Perl、正则表达式爱好者。在2001年接触Linux后很快喜欢上该系统。对Unix/Linux系统管理、Linux内核、Web技术研究颇多。工作之余,还喜欢探讨心理学,热衷出没于豆瓣和知乎。除此书外,他还译有《Linux Shell脚本攻略》和《理解Unix进程》。
目录信息
第1章 建立套接字 1
1.1 Ruby的套接字库 1
1.2 创建首个套接字 1
1.3 什么是端点 2
1.4 环回地址 3
1.5 IPv6 3
1.6 端口 4
1.7 创建第二个套接字 5
1.8 文档 6
1.9 本章涉及的系统调用 7
第2章 建立连接 8
第3章 服务器生命周期 9
3.1 服务器绑定 9
3.1.1 该绑定到哪个端口 10
3.1.2 该绑定到哪个地址 11
3.2 服务器侦听 12
3.2.1 侦听队列 13
3.2.2 侦听队列的长度 13
3.3 接受连接 14
3.3.1 以阻塞方式接受连接 15
3.3.2 accept调用返回一个数组 15
3.3.3 连接类 17
3.3.4 文件描述符 17
3.3.5 连接地址 18
3.3.6 accept循环 18
3.4 关闭服务器 19
3.4.1 退出时关闭 19
3.4.2 不同的关闭方式 20
3.5 Ruby包装器 22
3.5.1 服务器创建 22
3.5.2 连接处理 24
3.5.3 合而为一 25
3.6 本章涉及的系统调用 25
第4章 客户端生命周期 27
4.1 客户端绑定 28
4.2 客户端连接 28
4.3 Ruby包装器 30
4.4 本章涉及的系统调用 32
第5章 交换数据 33
第6章 套接字读操作 36
6.1 简单的读操作 36
6.2 没那么简单 37
6.3 读取长度 38
6.4 阻塞的本质 39
6.5 EOF事件 39
6.6 部分读取 41
6.7 本章涉及的系统调用 43
第7章 套接字写操作 44
第8章 缓冲 45
8.1 写缓冲 45
8.2 该写入多少数据 46
8.3 读缓冲 47
8.4 该读取多少数据 47
第9章 第一个客户端/服务器 49
9.1 服务器 49
9.2 客户端 51
9.3 投入运行 52
9.3 分析 52
第10章 套接字选项 54
10.1 SO_TYPE 54
10.2 SO_REUSE_ADDR 55
10.3 本章涉及的系统调用 56
第11章 非阻塞式IO 57
11.1 非阻塞式读操作 57
11.2 非阻塞式写操作 60
11.3 非拥塞式接收 62
11.4 非拥塞式连接 63
第12章 连接复用 65
12.1 select(2) 66
12.2 读/写之外的事件 68
12.2.1 EOF 69
12.2.2 accept 69
12.2.3 connect 69
12.3 高性能复用 72
第13章 Nagle算法 74
第14章 消息划分 76
14.1 使用新行 77
14.2 使用内容长度 79
第15章 超时 81
15.1 不可用的选项 81
15.2 IO.select 82
15.3 接受超时 83
15.4 连接超时 83
第16章 DNS查询 85
第17章 SSL套接字 87
第18章 紧急数据 92
18.1 发送紧急数据 93
18.2 接受紧急数据 93
18.3 局限 94
18.4 紧急数据和IO.select 95
18.5 SO_OOBINLINE选项 96
第19章 网络架构模式 97
第20章 串行化 101
20.1 讲解 101
20.2 实现 101
20.3 思考 105
第21章 单连接进程 107
21.1 讲解 107
21.2 实现 108
21.3 思考 111
21.4 案例 111
第22章 单连接线程 112
22.1 讲解 112
22.2 实现 113
22.3 思考 116
22.4 案例 117
第23章 Preforking 118
23.1 讲解 118
23.2 实现 119
23.3 思考 123
23.4 案例 124
第24章 线程池 125
24.1 讲解 125
24.2 实现 125
24.3 思考 129
24.4 案例 130
第25章 事件驱动 131
25.1 讲解 131
25.2 实现 133
25.3 思考 140
25.4 案例 142
第26章 混合模式 143
26.1 nginx 143
26.2 Puma 144
26.3 EventMachine 145
第27章 结语 147
· · · · · · (收起)
读后感
挺薄挺小也挺简单的一本书,相当与将Ruby中的TCP Sockets讲了一部分,顺带说明了一些基础知识。它并不能让你能够深入了解,对于Sockets入门来说勉勉强强。如果想提升Ruby水平,本书作用也不大,坦白来说本书是不是Ruby写的都影响不大。 任何在0~65535之间的端口都可以使用,但...
挺薄挺小也挺简单的一本书,相当与将Ruby中的TCP Sockets讲了一部分,顺带说明了一些基础知识。它并不能让你能够深入了解,对于Sockets入门来说勉勉强强。如果想提升Ruby水平,本书作用也不大,坦白来说本书是不是Ruby写的都影响不大。 任何在0~65535之间的端口都可以使用,但...
挺薄挺小也挺简单的一本书,相当与将Ruby中的TCP Sockets讲了一部分,顺带说明了一些基础知识。它并不能让你能够深入了解,对于Sockets入门来说勉勉强强。如果想提升Ruby水平,本书作用也不大,坦白来说本书是不是Ruby写的都影响不大。 任何在0~65535之间的端口都可以使用,但...
花了不到半天,就看完了。讲的东西是比较简单,如果是新人学习的话,还是勉强看看也可以。了解怎么用ruby写个简单服务端/客户端。有网络编程的经验,不建议看了。没有太多值得你惊喜的东西。看完这本书,依旧没法写好网络这块哈。
挺薄挺小也挺简单的一本书,相当与将Ruby中的TCP Sockets讲了一部分,顺带说明了一些基础知识。它并不能让你能够深入了解,对于Sockets入门来说勉勉强强。如果想提升Ruby水平,本书作用也不大,坦白来说本书是不是Ruby写的都影响不大。 任何在0~65535之间的端口都可以使用,但...
用户评价
从这本书中,我学到了太多关于网络通信的宝贵知识。作者的叙述方式非常独特,他能够将复杂的 TCP 协议和套接字 API,用一种非常易于理解的方式呈现出来。我尤其欣赏书中对错误处理的强调,作者详细讲解了各种可能出现的网络错误,以及如何通过设置特定的套接字选项来避免或减轻这些错误的影响。书中的代码示例,都是经过精心设计的,它们简洁、明了,且能够清晰地展示每一个概念的实现。我从中学到了如何使用 `getaddrinfo()` 和 `getnameinfo()` 来进行更灵活的网络地址解析,以及如何处理 IPv4 和 IPv6 的兼容性问题。此外,书中对UDP协议的简单介绍,也让我对不同的传输层协议有了更全面的认识。这本书的优点在于它的全面性和深度,它能够帮助我构建出更安全、更可靠的网络应用程序,已经成为我案头不可或缺的参考资料。
我必须承认,在拿起《TCP Sockets编程》之前,我对网络编程的理解仅仅停留在“发送和接收数据”的层面。然而,这本书彻底颠覆了我的认知。作者的笔触如同魔术师的双手,将那些原本可能令人望而生畏的技术概念,化为一幅幅清晰明了的图景。我尤其喜欢作者在解释“三次握手”和“四次挥手”时所使用的类比,它们形象生动,让我瞬间领悟了 TCP 连接建立和断开的精髓。书中关于数据传输的细节,例如滑动窗口、拥塞控制等,也被作者描绘得易于理解,让我能够深入洞察 TCP 如何在不可靠的网络环境中保证数据的可靠性。更让我惊喜的是,本书在讲解过程中,无缝地融入了大量实际场景的分析,例如如何处理粘包和分包问题、如何实现心跳机制、如何进行安全通信等等。这些都是在实际项目中经常会遇到的挑战,而本书提供的解决方案,不仅切实可行,而且经过了充分的验证。这本书的价值在于它提供了一个完整的知识体系,让我能够从宏观到微观,全面掌握 TCP 套接字编程的每一个环节。
《TCP Sockets编程》这本书,彻底改变了我对网络通信的看法。在此之前,我总觉得网络编程是一门深奥的学问,但作者以一种极其亲切的方式,将这层神秘的面纱揭开。书中关于数据包的结构、TCP 报文头的各个字段含义,以及它们如何在网络中传递,都被作者描绘得细致入微。我尤其喜欢作者对“字节序”问题的解释,以及如何在不同平台之间进行正确的数据转换,这对于跨平台网络通信至关重要。书中的案例分析,涵盖了从简单的聊天程序到复杂的分布式系统,让我看到了 TCP 套接字编程的广泛应用。作者在解释如何处理长连接、如何实现断线重连以及如何进行高效的数据序列化时,都提供了非常实用的指导。更让我印象深刻的是,书中还涉及了一些关于网络安全的基础知识,例如如何进行基本的加密和解密,虽然不是本书的重点,但这些附加信息极大地提升了本书的价值。这本书的优点在于它的全面性和实用性,它能够满足从初学者到有经验的开发者在网络编程领域的各种需求。
这本书绝对是我近期阅读过的技术书籍中最具颠覆性的体验之一。从一开始,我就被作者深入浅出的叙述风格所吸引,完全没有传统技术书籍那种晦涩难懂、枯燥乏味的通病。作者仿佛是一位经验丰富的向导,带领我穿越了 TCP/IP 协议栈的复杂网络,一步步揭示了套接字编程的奥秘。书中对每个概念的解释都极为到位,而且总是伴随着清晰易懂的代码示例。我尤其欣赏作者在解释数据流、缓冲区、错误处理等关键概念时所付出的努力,这些内容对于初学者来说至关重要,而作者却能将其描绘得如此生动形象。更重要的是,这本书不仅仅停留在理论层面,它还提供了大量实用的技巧和最佳实践,让我能够立即将所学知识应用于实际项目中。通过这本书,我不仅掌握了如何创建客户端和服务器,还学会了如何处理并发连接、设置超时、进行非阻塞 I/O 等高级特性。这本书的价值远远超过了它的售价,我强烈推荐给所有想要深入理解网络编程的开发者,无论是初学者还是有一定经验的工程师,都能从中受益匪浅。它不仅仅是一本技术书籍,更是一扇通往网络世界更深层理解的大门。
作为一名在IT行业摸爬滚打多年的开发者,我阅览过无数技术书籍,但《TCP Sockets编程》给我带来的惊喜却是前所未有的。它以一种非常独特的方式,将一个看似技术性极强的领域,解读得如同娓娓道来的故事。作者在组织材料时展现出的非凡功力,使得整个学习过程变得流畅而富有启发性。我常常在阅读的过程中,会不自觉地停下来,回味作者的精彩论述,然后迫不及待地想尝试书中的代码。书中的代码示例,不仅仅是功能的堆砌,而是经过精心设计,能够清晰地展示每一个关键概念是如何在实际运作中体现的。我特别赞赏作者在处理网络异常情况时的细致之处,例如如何优雅地关闭连接、如何应对各种网络错误以及如何进行有效的调试。这些细节往往是许多初学者容易忽视的,但它们却是构建健壮、可靠网络应用程序的关键。通过这本书,我不仅对 TCP 协议有了更深刻的认识,更重要的是,我学会了如何利用套接字API来构建高效、可扩展的网络服务。这本书已经成为我案头必备的参考资料,随时翻阅都能获得新的启发。
这本书为我打开了一个全新的视野,让我看到了网络编程背后隐藏的精妙之处。《TCP Sockets编程》的作者以一种令人惊叹的清晰度和深度,剖析了 TCP 套接字编程的方方面面。我非常赞赏书中对传输控制块(TCB)的详细介绍,以及它如何在 TCP 连接的生命周期中扮演关键角色。书中的内容不仅仅局限于 API 的使用,更深入地探讨了 TCP 协议的工作原理,例如 Nagle 算法、延迟确认等,这些细节的理解对于优化网络性能至关重要。作者在讲解如何处理广播和多播时,也提供了非常实用的指导,让我能够理解如何在局域网内实现高效的数据分发。更让我感到惊喜的是,本书还对一些网络调试工具的使用进行了介绍,例如 `netstat`、`tcpdump` 等,这对于排查网络问题非常有帮助。这本书的价值在于它能够帮助我构建出更鲁棒、更高效的网络应用程序,它已经成为我解决网络编程难题的首选参考。
这本书彻底改变了我对网络编程的认知,让我看到了其中的无限可能。《TCP Sockets编程》的作者以一种极其清晰和有条理的方式,将 TCP 协议的复杂性化繁为简。我特别赞赏书中对并发模型和异步 I/O 的深入探讨,作者详细讲解了如何使用 event notification 机制来构建高性能的网络服务器,例如 `kqueue`、`IOCP` 等。书中的代码示例,都经过了精心的设计,它们不仅能够清晰地展示每一个概念的实现,而且都经过了严格的测试,能够直接在实际环境中运行。我从中学到了如何使用 `connect()` 的非阻塞模式来避免应用程序的阻塞,以及如何结合 `select()` 或 `poll()` 来处理多个并发连接。更让我感到惊喜的是,书中还对一些网络协议的实现细节进行了介绍,例如 TCP 的拥塞控制算法,这让我能够更深入地理解 TCP 如何在复杂的网络环境中保持高效稳定的传输。这本书的优点在于它的深度和广度,它能够帮助我构建出更具创新性和高性能的网络应用程序,已经成为我学习网络编程的必备指南。
《TCP Sockets编程》这本书,是我在技术书籍中遇到的一个惊喜。作者以一种非常接地气的方式,将 TCP 协议的底层细节和套接字编程的实践技巧相结合。我特别欣赏书中对连接管理和资源释放的讲解,作者强调了在网络通信中及时关闭连接和释放资源的重要性,这对于防止内存泄漏和提高系统稳定性至关重要。书中的代码示例,不仅仅是功能的展示,更是作者教学理念的体现,它们简洁、高效,且易于理解和修改。我从中学到了如何使用 `setsockopt()` 来配置各种套接字选项,以优化网络性能和行为,例如设置 SO_LINGER、SO_RCVBUF、SO_SNDBUF 等。更让我感到惊喜的是,书中还对一些常用的网络服务,例如 FTP、HTTP 的基本实现进行了介绍,这让我能够看到 TCP 套接字编程在实际应用中的强大威力。这本书的价值在于它的实践性和前瞻性,它能够帮助我构建出更具竞争力的网络应用程序。
毫无疑问,《TCP Sockets编程》是我近年来阅读过的技术类书籍中,最令我感到振奋的一本。作者用一种极其引人入胜的方式,将 TCP 协议和套接字编程的内在逻辑一一呈现。我特别欣赏作者在描述连接状态转换时的生动比喻,它们帮助我更直观地理解了 TCP 连接的整个生命周期。书中关于缓冲区管理、信号量以及线程同步的讲解,为我构建高效、无死锁的网络应用程序提供了坚实的基础。我从中学到了如何有效地使用 `select()`、`poll()` 和 `epoll()` 等多路复用技术,这对于编写高性能的服务器端程序至关重要。本书的实践导向性非常强,每一个理论概念的讲解,都伴随着精心设计的代码示例,并且这些示例都经过了严格的测试,能够直接在实际环境中运行。我尤其喜欢作者对阻塞模式和非阻塞模式的对比分析,这让我能够根据不同的应用场景选择最合适的工作方式。这本书不仅仅是知识的传授,更是一种思维方式的培养,它让我能够更深刻地理解网络通信的本质。
阅读《TCP Sockets编程》的过程,就像是在进行一次由浅入深的探索之旅。作者以其独有的叙事方式,将原本可能复杂抽象的网络概念,变得触手可及。我特别欣赏书中关于并发处理的论述,例如多线程、多进程以及异步 I/O 模型的使用,作者清晰地阐述了每种模式的优缺点,以及在不同场景下的适用性。这对于构建能够处理大量并发连接的服务器端应用程序至关重要。书中的代码示例,不仅仅是为了演示功能,更是作者教学理念的体现,它们简洁、高效,且易于理解和修改。通过这些示例,我学会了如何使用不同的套接字选项来优化网络性能,例如设置 SO_REUSEADDR、SO_KEEPALIVE 等。此外,书中对错误处理的深入讲解,让我能够更好地预测和应对各种网络异常,从而编写出更加健壮的代码。这本书的结构安排非常合理,层层递进,让我在掌握基础知识的同时,也能逐步深入到更高级的议题。它无疑是我近期阅读过的最有价值的技术书籍之一。
ruby 的示例使用
赞
当初为了让mac和windows通过网络互发消息, 搞的我死去活来, 后来发现这本书讲的很不错
可以先简单了解一下socket编程的一些概念
挺好的,可以看成是 https://www.textarea.com/zhicheng/yong-python-lijie-fuwuqi-moxing-shang-566/ 这篇文章的展开版。