PeertoPeer (PP)Sockets工程在JXTA peertopeer虚拟网络重新实现了对应于标准TCP/IP网络中的Java标准的SocketServerSocket和InetAddress等类该工程同时还引入了一些注入Jetty web serverApache XMLRPC客户端和服务器库Apache Jasper JSP引擎之类的流行web package使这些服务可以运行在PeertoPeer Sockets 的框架下 在这片文章结束的时候你会理解对PP Sockets packages的需求和以及开发它的动机学会怎么配置PP Socket 库使之在你的系统上能够运行学会怎么样建立PP的服务器和客户端Socket怎么使用PP的InetAddress 类还包括框架下的安全问题以及它的局限性 动机 PP Socket工程的设计的使用对象是对以下几个领域有兴趣的开发者 ●将Internet回归到endtoend的原则当中 ●一种绕过ICANN和Verisign的替代peertopeer域名系统这个系统是完全分布式的对更新拥有比标准DNS快的多的响应速度 ●一种任何人都可以建立活着使用网络服务的Internet及时他们使用动态的IP地址或是没有IP地址或是只有内网地址(NAT)或者是在ISP的防火墙之后 ●一个每一个Peer都能够自动的建立一个Web Server提供XMLRPC服务能够快速的将这种服务提供给其他的Peer ●使为PeertoPeer网络添加Java Socket和ServerSocket 的应用更加容易 ●享受更酷的科技 PP Socket 工程在JXTA peertopeer网络上重新实现了标准报当中的类一些人可能要问难道标准TCP/IP socket和ServerSocket不是已经是peertopeer的了吗?标准的TCP/IP socket和server socket在理论上是peertopeer的不过由于防火墙NAT设备以及DNS所存在的政治或是技术的问题在实际上却没有做到这一点首先Internet上的许多peer使用的都是通过DHCP协议取得的动态IP这些IP由通过NAT设备共享和过滤还有一些IP地址由于防火墙的限制很难被访问到在这样的条件下建立server socket应用要么是不可能的要么就需要在应用层进行精妙的控制来绕过这些限制其次TCP/IP Socket依赖于DNS系统来将用户友好的主机名转变为IP地址DNS在理论上就是办分布式的但是在管理层面上DNS是在ICANN下集中式管理的而ICANN是一个反应迟钝的没有创新意识的组织再次标准的DNS对对那些过滤或是使用动态IP地址的edgepeer支持的并不好更新需要花费很长的时间传播下去而且并不提供presence信息对那些想要开发能够扩展DNS到新的领域(例如将即时消息的用户名和存在信息加入到DNS)的新应用的开发者来说DNS系统的技术和政治因素阻碍了他们的工作 JXTA是一个用于在TCP/IP之上建立peertopeer覆盖网络的开源工程在网络中的没一个peer都会被分配到一个和IP地址类似的号码即时他们没有固定的IP地址或是出在防火墙之后在JXTA 网络上的superpeer通讯运行应用层的路由协议来储存例如如果到达其他的peer如何加入peer group其他peer提供了怎么样的内容之类的信息JXTA应用层在Peer之间提供了中继的代理服务是出在防火墙或是NAT后的Peer可以正常的通信Peer可以自己组织成为Peer Group这样可以将所有的查询请求限定在natural security container当中任何peer都可以分布式的建立并发布一个peer group其他的Peer通过使用其他的superpeer可以搜索并发现这些peer groupPeer之间的通信通过pipe的方式来进行这和Unix系统当中的Pipe非常的类似Pipe是对两个peer之间通讯方式的一种抽象它帮助peer互相通讯即使他们处在不同的网络区域当中 JXTA是一种非常强大的框架但是它并不是一种容易学习的框架将现有的软件移植到JXTA下也不是一件容易的事情PP Sockets成功地将JXTA隐藏起来使之看起来就像是传统的TCP/IP网络如果peer想要成为服务器他只需要简单的使用包含他们想使用的domain name和端口的PP Server Socket就可以了PP的客户端可以通过host名和特定的端口号来建立Socket连接访问那些服务Host可以被解析为域名例如wwwnikelaborpolicy或是IP地址例如在这些场景之后host实际被解析为JXTA原语而不是被解析为DNS或是TCP/IP举例来说域名wwwnikelaborpolicy实际上是JXTA peer group 的广告消息中的一个NAME字段PP Sockets和Server socket 与正常的TCP/IP Socket和ServerSocket的使用方法完全相同我们为希望了解内幕和那些已经懂得JXTA的用户提供了一张表()在这张表中可以查询到传统TCP/IP概念上的域名IP地址等概念和JXTA中对等概念的对应关系 使用这种方式的好处是多方面的首先程序员可以将他们在标准TCP/IP Socket和Server Socket的知识应用到JXTA peertopeer网络当中而不需要专门学习JXTA其次所有的PP Socket 的代码都是标准中类的子类例如Socket所以现存的网络应用可以很容易的移植到peertopeer网络当中 PP Socket工程已经将很多现存的软件移植到了peertopeer网络当中其中包括web服务器(Jetty)它可以接收请求被在peertopeer 网络上提供内容服务一个servlet和JSP引擎(Jetty 和 Jsper)它可以使现存的servlet和JSP直接在PP网络中应用一个XMLRPC客户端和服务器(Apache XMLRPC)它可以访问和对外提供PP XMLRPC 端点一个HTTP/客户端(Apache Commons HTTPClient)它可以访问PP的web 服务器一个网关(Smart Cache)它可以是现有浏览器访问PP的PP web 站点和WikiWiki(JSPWiki)它能够在你的主机上建立Wiki站点使其他的Peer可以通过PP网络访问并编辑所有的这些软件在移植之后都能够正常的使用并且和以前看起来完全一样PP Socket的抽象非常的成功移植这些软件所花费的时间仅仅是分钟到几个小时不等PP Socket工程是完全开源的大部分都采用BSDtype证书由于是使用Java编写的所以也具有跨平台的特性 由于PP Socket是建立在JXTA之上的所以它可以很容易的处理一些传统的ServerSocket和Socket所不能处理的情况第一在PP Socket上建立的ServerSocket具有failover(不知道怎么翻译应该是可靠性之类的意思)和易扩展的特性如果不同的Peer可以启动ServerSocket使用同一个域名和端口例如wwwnikelaborpolicy 端口号当一个客户端打开PP socket连接到wwwnikelaborpolicy 端口号时它会随机的连接到一个提供一个使用这个域名和端口的主机上所有的这些服务器Peer可能提供同样的Web页面这就是可以将用户的请求分布到不同的服务器之上同时也就使得某一个服务器的崩溃更容易被恢复这一点和DNS roundrobin非常的相似在DNS roundrobin当中一个域名可以被解析为多个IP地址用来进行负载均衡第二由于PP Socket并不使用DNS系统主机名可以任意指定用户可以建立他自己的个性结尾例如wwwboobahcat 或是wwwcynthiagoddess或是应用确定的名字例如一个即使消息系统使用Brad GNUberg或是Fidget当作域名第三一个指定域名的服务端口可以分布在全世界很多的Peer当中举例来说假设你有一个虚拟主机名wwwnikelaborpolicy一个Peer可以在端口提供web页面另一个Peer可以使用端口提供即时消息最后一个Peer可以在端口为其他Peer提供即时的RSS更新现在一个域名可以由很多分布不同的Peer协同在一起提供服务 需求与配置 要开发和使用PP Socket你必须下载和安装一下的这些软件 ●JDK + PP Socket只能工作在JDK 或是更新版本的Java虚拟机之上由于PP Socket是InetAddress的子类在之前这个类是final类型的 ●Ant + 用来构建和运行PP Socket以及类似于Jetty 和 Jasper之类的扩展 ●PPSocketsbetazip PP Socket 的最新发布包 安装和配置好JDK和Ant并保证它们都可以在命令行下正确运行将PPSocketsbetazip解开到硬盘上在目录名当中不能出现空格否则PP Sockets的构建文件不能正常工作 必须将JAR文件ppsockets/lib/antcontribjar加入到你的CLASSPATH当中去在Windows当中可以使用下面这个命令 set CLASSPATH=%CLASSPATH%;c:\ppsockets\lib\antcontribjar PP Sockets的目录包含两个不同的子目录test/clientpeer和test/serverpeer它们中有已经设置好的JXTA配置信息(分别在test/clientpeer/JXTA和test/serverpeer/JXTA当中)如果你想要了解更多的关于JXTA的配置问题你可以阅读JXTA配置指南两个测试peer已经被配置为最差的情况下工作模式也就是peer处在防火墙或是NAT设备之后也就是说用户必须使用其他的中间Peer来中继它们的请求如果用户不处在这种环境下这种配置方式也是可以工作的使用JXTA的一个好处就是当你在使用这个系统的时候它对你的程序几乎是透明的 当你在测试本文中的代码的时候你必须连接到Internet这样做基于一下的两个原因首先例子程序使用Sun提供的公共JXTA服务器来将启动peer引入JXTA网络当中其次在一些操作系统上(例如Windows XP 缺省)网络系统在你没有连接到网络上时会自动关闭这样就会阻碍运行在同一个主机上的客户端peer和服务器peer互相通讯 建立一个PP Server Socket 建立一个PP server Socket的方法和建立一个标准的Server |