第一部分 P2P简介
第1章 P2P的基本概念 3
1.1 P2P发展简史 3
1.2 P2P应用程序的用武之地 5
1.3 采用P2P的目的 5
1.3.1 分散化 6
1.3.2 费用和有效的资源分配 7
1.3.3 普及应用的计算和边缘服务 7
1.4 商业和实现方面的考虑 7
1.5 P2P体系结构 8
1.5.1 P2P如何形成动态网络 10
1.5.2 节点自制 13
1.5.3 支持混合模型 14
1.6 JXTA和XML 17
1.7 未来包含Web服务的P2P技术 18
总结 19
第2章 基于Java平台的P2P解决方案 20
2.1 Java的优势 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平台的特别优势 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 对等性和独立性的优势 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章 作为分布式计算环境框架的P2P 58
4.1 P2P系统的通用功能和特性 58
4.1.1 动态网络 58
4.1.2 节点的对等性和自治性 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 资源(节点)搜索的含义 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动态网络 90
6.1 对等节点和资源检索 90
6.1.1 路由器对等节点和动态网络 91
6.1.2 广播 91
6.1.3 选择性广播 95
6.1.4 适应性广播 96
6.2 身份标识和在线状态 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网络搜索对等节点资源 131
总结 132
第9章 集成和互操作性 133
9.1 从套接字到分布式对象:集成网络协议 133
9.2 确定集成对象:将什么东西集成在一起 135
9.2.1 现有系统(支配着这个世界的系统) 135
9.2.2 语法和语义方面的问题 135
9.3 通用的集成协议和系统 136
9.3.1 坚强的老战士: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 挑战-响应 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 为开发安全的P2P应用程序的软件 175
10.11 其他资源 186
总结 188
第三部分 使用Java开发分布式系统
第11章 Web服务 191
11.1 Web服务和Web服务对互操作性的促进作用 191
11.1.1 应用程序的集成 192
11.1.2 面向服务的应用程序结构 193
11.2 Web服务架构:互操作功能栈 193
11.2.1 Web服务的网络功能栈 194
11.2.2 描述功能栈 195
11.2.3 服务检索功能栈 195
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系统对等节点的消息传输客户端 227
12.2.5 P2P应用程序消息传输提供者扮演的角色 227
12.2.6 面向消息的中间件(Message-Oriented Middleware, MOM) 228
12.2.7 Java消息传输服务 228
12.2.8 使用JMS开发应用程序 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 集合节点 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 转发(Relay) 362
16.1.3 端点(Endpoint) 364
16.1.4 管道的重要性 364
16.2 JXTA协议 365
16.2.1 对等节点解析器协议 366
16.2.2 端点路由协议 368
16.2.3 对等节点检索协议 369
16.2.4 集合对等节点协议 370
16.2.5 管道绑定协议 371
16.2.6 对等节点信息协议 372
16.2.7 对等节点组和对等节点成员身份协议 372
16.2.8 JXTA服务 375
16.2.9 对等节点组服务 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 创建和发布公告信息 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 环境变量 404
17.3 通过Shell与远程对等节点进行交互 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 信息发布 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 对等节点域的形成 447
19.1.2 对等节点的在线状态 447
19.1.3 监控 447
19.2 应用程序的设计 448
19.2.1 应用程序的实现细节 449
19.2.2 P2P控制器应用程序功能示例 450
19.2.3 P2P控制器应用程序的目的 452
19.2.4 P2P控制器应用程序的使用场景 453
19.2.5 类设计 453
19.3 代码细节 454
19.3.1 P2PDashboard类的实现细节 454
19.3.2 PeerDiscovery类的实现细节 471
19.3.3 GroupDiscovery.java类的实现细节 475
19.3.4 SortedListModel类的实现细节 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 对等节点域的形成 506
21.1.2 应用程序中的路由和消息传输 506
21.2 应用程序的设计 506
21.2.1 应用程序细节 507
21.2.2 游戏应用程序的适用场景 513
21.2.3 类设计 513
21.3 应用程序代码细节 514
总结 531
第22章 远程学习系统 532
22.1 远程学习系统 532
22.1.1 应用程序的目的 532
22.1.2 对等节点域的形成 532
22.2 应用程序的设计 532
22.2.1 应用程序细节 533
22.2.2 应用程序的使用场景 536
22.2.3 类设计 536
22.2.4 具体细节 536
22.3 代码细节 536
22.3.1 Student类的实现细节 536
22.3.2 Teacher类的实现细节 544
22.3.3 Agent类的实现细节 550
22.3.4 AgentFactory类的实现细节 554
总结 555
第23章 P2P的未来发展方向 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