第一部分 P2P簡介
第1章 P2P的基本概念 3
1.1 P2P發(fā)展簡史 3
1.2 P2P應用程序的用武之地 5
1.3 采用P2P的目的 5
1.3.1 分散化 6
1.3.2 費用和有效的資源分配 7
1.3.3 普及應用的計算和邊緣服務 7
1.4 商業(yè)和實現方面的考慮 7
1.5 P2P體系結構 8
1.5.1 P2P如何形成動態(tài)網絡 10
1.5.2 節(jié)點自制 13
1.5.3 支持混合模型 14
1.6 JXTA和XML 17
1.7 未來包含Web服務的P2P技術 18
總結 19
第2章 基于Java平臺的P2P解決方案 20
2.1 Java的優(yōu)勢 20
2.1.1 平臺獨立性 20
2.1.2 Java的分布式特性 21
2.1.3 RMI 21
2.1.4 支持多線程 21
2.1.5 語言可靠性和成熟性 22
2.1.6 安全性 22
2.1.7 Java虛擬機 22
2.2 Java平臺的特別優(yōu)勢 26
2.2.1 J2SE 26
2.2.2 J2EE 32
2.2.3 J2ME 33
2.2.4 XML 36
2.2.5 JAX包 36
2.3 對等性和獨立性的優(yōu)勢 39
總結 39
第3章 P2P應用程序的類型 40
3.1 實時消息傳輸 40
3.1.1 技術 42
3.1.2 產品 44
3.2 管理和共享信息 47
3.2.1 技術 48
3.2.2 產品 50
3.3 協作 52
3.3.1 技術 52
3.3.2 產品 53
3.4 分布式服務 54
3.4.1 技術 54
3.4.2 分布式網絡產品 56
總結 57
第4章 作為分布式計算環(huán)境框架的P2P 58
4.1 P2P系統的通用功能和特性 58
4.1.1 動態(tài)網絡 58
4.1.2 節(jié)點的對等性和自治性 58
4.2 P2P系統與傳統系統之間的比較 59
4.2.1 Usenet News 和 NNTP(網絡新聞傳輸協議) 59
4.2.2 Email(電子郵件系統) 60
4.2.3 域名服務 61
4.3 Web服務概述 62
4.3.1 Web服務的定義 62
4.3.2 P2P的可用性 64
4.4 Jini和JavaSpaces概述 64
4.4.1 Jini的定義 64
4.4.2 JavaSpace定義 65
4.4.3 設備和服務 66
4.4.4 P2P的可用性 66
4.5 JXTA概述 67
4.5.1 JXTA的定義 67
4.5.2 標準化P2P協議 69
總結 69
第二部分 P2P系統和結構
第5章 系統話題探討 73
5.1 網絡傳輸 73
5.1.1 通信模型 73
5.1.2 資源(節(jié)點)搜索的含義 74
5.1.3 虛擬名字空間 75
5.1.4 路由 75
5.2 協議 77
5.3 元數據 78
5.4 數據格式 80
5.5 功能的集成和互操作性 81
5.5.1 J2EE和Java的消息傳輸服務 82
5.5.2 Web服務和SOAP-RP 83
5.5.3 CORBA和SCOAP 84
5.5.4 Jini和JavaSpaces 85
5.6 安全性 86
5.6.1 傳統的安全性的需求 86
5.6.2 匿名性 86
5.6.3 信任關系 87
5.6.4 可審計性 87
5.7 性能 88
總結 88
第6章 P2P動態(tài)網絡 90
6.1 對等節(jié)點和資源檢索 90
6.1.1 路由器對等節(jié)點和動態(tài)網絡 91
6.1.2 廣播 91
6.1.3 選擇性廣播 95
6.1.4 適應性廣播 96
6.2 身份標識和在線狀態(tài) 97
6.3 虛擬網絡空間 97
6.4 路由 101
6.4.1 覆蓋網絡 101
6.4.2 平面網絡模型 102
6.4.3 層次型網絡模型 103
6.5 性能 103
6.5.1 帶寬的可擴展性 104
6.5.2 容錯功能 105
總結 105
第7章 消息傳輸方式及協議 107
7.1 什么是協議 107
7.2 HTTP協議 107
7.3 SMTP協議 109
7.4 SOAP協議 109
7.5 BEEP協議 110
7.5.1 BEEP協議中使用的一些術語 110
7.5.2 BEEP協議的工作方式 111
7.5.3 使用BEEP協議的Java綁定 111
7.5.4 APEX協議 119
7.5.5 BEEP的未來 119
7.6 使用定制協議 120
總結 120
第8章 P2P數據格式和數據交換 121
8.1 目前使用的元數據表示形式 121
8.1.1 P2P的困境 122
8.1.2 元數據和信息 122
8.1.3 萬維網. P2P和元數據 123
8.1.4 HTML和元數據 123
8.2 XML和元數據 123
8.2.1 語義Web--一種歷史的觀點 124
8.2.2 Dublin 核心元數據 126
8.2.3 其他標準 127
8.2.4 Java和RDF:HP的Jena工具集 127
8.3 P2P系統中的XML和元數據:應用程序 129
8.3.1 消息傳輸 129
8.3.2 數據內容管理 130
8.3.3 XML作為數據源 130
8.3.4 XML作為P2P應用程序的部署層模型 130
8.4 在P2P網絡搜索對等節(jié)點資源 131
總結 132
第9章 集成和互操作性 133
9.1 從套接字到分布式對象:集成網絡協議 133
9.2 確定集成對象:將什么東西集成在一起 135
9.2.1 現有系統(支配著這個世界的系統) 135
9.2.2 語法和語義方面的問題 135
9.3 通用的集成協議和系統 136
9.3.1 堅強的老戰(zhàn)士:EDI協議 136
9.3.2 Java RMI 138
9.3.3 CORBA 140
9.3.4 DCOM 142
9.3.5 Web服務. 基于XML的遠程過程調用和SOAP 142
9.3.6 其他系統 144
總結 144
第10章 P2P的安全性 145
10.1 網絡的安全性要求 145
10.2 網絡身份標識 146
10.3 安全性基礎 147
10.4 身份識別 152
10.4.1 地址 153
10.4.2 名字空間 153
10.4.3 中心化的身份識別和本地身份識別 153
10.4.4 身份標識中的其他信息 154
10.5 身份認證 154
10.5.1 密碼 154
10.5.2 挑戰(zhàn)-響應 155
10.5.3 可信任的第三方部件 155
10.5.4 令牌 156
10.5.5 數字化證書 156
10.6 授權 157
10.6.1 Kerberos 157
10.6.2 PKI 159
10.6.3 SAML 161
10.6.4 Microsoft .NET Passport 163
10.6.5 數據的完整性 166
10.6.6 保密性 166
10.6.7 不可否認性 167
10.7 私有性和匿名性 169
10.8 信任 171
10.9 可審計性 174
10.9.1 微小付費模型 174
10.9.2 聲譽模型 174
10.10 為開發(fā)安全的P2P應用程序的軟件 175
10.11 其他資源 186
總結 188
第三部分 使用Java開發(fā)分布式系統
第11章 Web服務 191
11.1 Web服務和Web服務對互操作性的促進作用 191
11.1.1 應用程序的集成 192
11.1.2 面向服務的應用程序結構 193
11.2 Web服務架構:互操作功能?!?93
11.2.1 Web服務的網絡功能棧 194
11.2.2 描述功能?!?95
11.2.3 服務檢索功能?!?95
11.3 Web服務涉及到的主要技術 196
11.3.1 XML 196
11.3.2 SOAP 206
11.3.3 WSDL 209
11.3.4 UDDI 215
總結 223
第12章 消息傳輸和針對XML的Java API 224
12.1 針對第三方服務的標準API 224
12.1.1 任何P2P應用程序架構的兩個基本需求 224
12.1.2 Java處理P2P系統基本需求的方式 225
12.1.3 XML消息傳輸的概念 226
12.2 JMS和消息傳輸的重要性 226
12.2.1 消息傳輸的含義 226
12.2.2 消息傳輸和請求-響應通信方式的比較 226
12.2.3 消息傳輸客戶端和消息傳輸提供者 227
12.2.4 作為P2P系統對等節(jié)點的消息傳輸客戶端 227
12.2.5 P2P應用程序消息傳輸提供者扮演的角色 227
12.2.6 面向消息的中間件(Message-Oriented Middleware, MOM) 228
12.2.7 Java消息傳輸服務 228
12.2.8 使用JMS開發(fā)應用程序 229
12.2.9 一個基于JMS的消息傳輸應用程序 230
12.3 用于XML文檔解析的Java API 238
12.3.1 使用JAXP和DOM編輯SOAP請求消息 239
12.3.2 使用JAXP和SAX經過簡單API處理SOAP響應消息 243
12.3.3 JAXP中的XSLT 249
12.4 XML和Java提供的用于綁定XML的API 251
12.5 使用JAXM控制XML消息的結構 255
12.5.1 JAXM作為一個簡單的SOAP客戶端 256
12.5.2 使用JAXM編輯SOAP消息的消息頭 260
12.5.3 使用JAXM消息傳輸提供者和概要文件 261
總結 263
第13章 使用注冊簿 265
13.1 用于P2P應用程序的XML注冊簿 265
13.2 UDDI 266
13.3 使用Java編輯UDDI消息請求 276
13.4 ebXML(針對電子商務的XML) 280
13.5 針對XML注冊簿的Java API 295
13.6 訪問Web服務 301
總結 302
第14章 Jini和JavaSpace 303
14.1 獲得Jini 303
14.2 標準化接口 303
14.3 HTTP服務器和協議 304
14.4 遠程方法調用 304
14.4.1 RMI注冊簿 306
14.4.2 單點廣播和能自啟動的服務 306
14.4.3 在P2P應用程序中RMI扮演的角色 311
14.5 查詢和檢索 311
14.5.1 理解服務檢索的管理機制 312
14.5.2 基于多點廣播的消息傳輸和基于單點廣播的消息傳輸 313
14.5.3 Jini查詢服務 315
14.5.4 Jini中的服務檢索和綁定 317
14.6 Jini服務 326
14.6.1 檢索和查詢服務 326
14.6.2 重新確定租借時間服務 326
14.6.3 事件郵箱服務 327
14.6.4 支持P2P事務 327
14.6.5 支持P2P通信(JavaSpace, Java空間) 328
總結 331
第15章 P2P Jini和JavaSpace 333
15.1 邊緣服務 333
15.1.1 分布式通信 334
15.1.2 永久通信通道 343
15.1.3 JavaSpace實時消息實例 346
15.1.4 集合節(jié)點 353
15.2 自愈合網絡 353
15.3 智能軟件代理 355
15.3.1 簡單軟件代理應用程序框架 355
15.3.2 移動代理 356
總結 357
第16章 JXTA和XML 358
16.1 網絡的虛擬化 358
16.1.1 JXTA身份標識. 信任狀以及身份標識和信任狀的公告信息 361
16.1.2 轉發(fā)(Relay) 362
16.1.3 端點(Endpoint) 364
16.1.4 管道的重要性 364
16.2 JXTA協議 365
16.2.1 對等節(jié)點解析器協議 366
16.2.2 端點路由協議 368
16.2.3 對等節(jié)點檢索協議 369
16.2.4 集合對等節(jié)點協議 370
16.2.5 管道綁定協議 371
16.2.6 對等節(jié)點信息協議 372
16.2.7 對等節(jié)點組和對等節(jié)點成員身份協議 372
16.2.8 JXTA服務 375
16.2.9 對等節(jié)點組服務 376
16.2.10 JXTA模塊 377
16.3 JXTA J2SE API 379
16.4 第一個JXTA應用程序 379
16.5 JXTA素數檢索應用程序 381
16.5.1 JXTA應用程序的設計 383
16.5.2 消息定義 384
16.5.3 服務的定義和檢索 385
16.5.4 服務的實現 385
16.5.5 創(chuàng)建和發(fā)布公告信息 387
16.5.6 處理從InputPipe對象中傳輸來的消息 391
16.5.7 素數檢索應用程序的客戶端 392
總結 400
第17章 JXTA Shell 401
17.1 為什么要使用Shell 401
17.2 啟動和使用Shell 403
17.2.1 使用man命令 403
17.2.2 JXTA Shell程序和Unix shell之間的差別 404
17.2.3 環(huán)境變量 404
17.3 通過Shell與遠程對等節(jié)點進行交互 409
17.4 Shell程序的擴展 412
17.5 連接Shell命令 418
總結 419
第四部分 P2P應用程序示例
第18章 構建個人化入口應用程序 423
18.1 個人化入口的基本概念 423
18.2 信息內容管理 424
18.3 個人化的信息空間 425
18.4 共享信息 427
18.5 信息發(fā)布 427
18.6 個人化入口的設計 428
18.6.1 個人化入口的功能 429
18.6.2 設計個人化入口應用程序的類 430
18.7 應用程序代碼 431
18.7.1 資源租用 433
18.7.2 服務檢索 441
18.8 運行應用程序實例 443
18.8.1 配置 443
18.8.2 啟動服務 443
總結 446
第19章 P2P控制器 447
19.1 P2P控制器 447
19.1.1 對等節(jié)點域的形成 447
19.1.2 對等節(jié)點的在線狀態(tài) 447
19.1.3 監(jiān)控 447
19.2 應用程序的設計 448
19.2.1 應用程序的實現細節(jié) 449
19.2.2 P2P控制器應用程序功能示例 450
19.2.3 P2P控制器應用程序的目的 452
19.2.4 P2P控制器應用程序的使用場景 453
19.2.5 類設計 453
19.3 代碼細節(jié) 454
19.3.1 P2PDashboard類的實現細節(jié) 454
19.3.2 PeerDiscovery類的實現細節(jié) 471
19.3.3 GroupDiscovery.java類的實現細節(jié) 475
19.3.4 SortedListModel類的實現細節(jié) 480
總結 482
第20章 在P2P應用程序中使用SOAP 483
20.1 將Web服務和P2P結合在一起將給我們帶來什么 483
20.1.1 Web服務使用的模型 483
20.1.2 目前Web服務模型中采用的客戶端-服務器通信模式 484
20.1.3 P2P消息傳輸模型 484
20.2 P2P Web服務 485
20.2.1 P2P體系結構上的SOAP應用程序 485
20.2.2 基于P2P網絡基礎之上的SOAP應用程序的使用場景 487
20.2.3 基于P2P網絡基礎之上的SOAP應用程序中包含的類 488
20.2.4 如何使用基于P2P網絡基礎之上的SOAP應用程序 502
20.3 推薦的一些改進方案 504
20.3.1 對UDDI的支持 504
20.3.2 統計調用請求和實現CRM解決方案 504
總結 505
第21章 P2P游戲 506
21.1 P2P游戲應用程序 506
21.1.1 對等節(jié)點域的形成 506
21.1.2 應用程序中的路由和消息傳輸 506
21.2 應用程序的設計 506
21.2.1 應用程序細節(jié) 507
21.2.2 游戲應用程序的適用場景 513
21.2.3 類設計 513
21.3 應用程序代碼細節(jié) 514
總結 531
第22章 遠程學習系統 532
22.1 遠程學習系統 532
22.1.1 應用程序的目的 532
22.1.2 對等節(jié)點域的形成 532
22.2 應用程序的設計 532
22.2.1 應用程序細節(jié) 533
22.2.2 應用程序的使用場景 536
22.2.3 類設計 536
22.2.4 具體細節(jié) 536
22.3 代碼細節(jié) 536
22.3.1 Student類的實現細節(jié) 536
22.3.2 Teacher類的實現細節(jié) 544
22.3.3 Agent類的實現細節(jié) 550
22.3.4 AgentFactory類的實現細節(jié) 554
總結 555
第23章 P2P的未來發(fā)展方向 556
23.1 P2P設備 556
23.2 語義和Ontology 557
23.2.1 資源描述框架 557
23.2.2 Ontology 559
23.3 CC/PP 562
23.4 WSIL 564
23.5 Web服務的互操作性 565
23.6 Grid計算 565
23.7 智能化軟件代理 567
23.7.1 軟件代理 568
23.7.2 安全性. 身份標識和完整性 568
23.7.3 軟件代理的通信 568
23.8 P2P技術全家福 569
附 錄
附錄 J2EE概述 575