內容介紹
本書從最底層的概念開始,然後是高層的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 IPv63
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_TYPE54
10.2 SO_REUSE_ADDR55
10.3 本章涉及的系統調用56
第11章 非阻塞式IO57
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 EOF69
12.2.2 accept69
12.2.3 connect69
12.3 高性能復用72
第13章 Nagle算法74
第14章 訊息劃分76
14.1 使用新行77
14.2 使用內容長度79
第15章 逾時81
15.1 不可用的選項81
15.2 IO.select82
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.select95
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章 Preforking118
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 nginx143
26.2 Puma144
26.3 EventMachine145
第27章 結語147