专业的镇江网站建设,做网站链接 赚钱 违法吗,国外比较好的资源网站,学专科电子商务后悔死了什么是P2P#xff08;peer to peer#xff09;? 跟P2P对应的是传统的客户端-服务器#xff08;C/S或B/S)体系结构,这种体系结构就是客户端发送请求#xff0c;服务器端给予响应。但是随着客户端不断的增加#xff0c;成了服务器端崩溃的主要原因。增加服务器的功能或者资… 什么是P2Ppeer to peer? 跟P2P对应的是传统的客户端-服务器C/S或B/S)体系结构,这种体系结构就是客户端发送请求服务器端给予响应。但是随着客户端不断的增加成了服务器端崩溃的主要原因。增加服务器的功能或者资源增加更多的服务器可以缓解这种情况但除此之外对等网络P2P可以从本质上避免服务器的崩溃问题。 首先先了解一下文件共享技术如BitTorrent的工作方式 许多人同时从一个服务器上下载一个资源往往会使服务器的负载很重。而P2P技术不把资源直接从服务器上发送给客户端而是先把文件仅分发给几个客户端另外的客户端可以从已经存在该资源的客户端上下载更多的客户端可以从这些二级客户端上下载以此类推。实际上这个过程把文件分解为几个块再把这些块分解到客户端上一些客户端从服务器上下载文件另外的客户端从其他客户端上下载所以这个过程会更快完成。 但是P2P体系存在一些问题客户端如何检测其他客户端的存在如何定位其他客户端包含的文件块如何进行客户间的通信 所以每个P2P网络应用程序的客户端能够完成以下操作 1.它必须能够发现其他客户端 2.它必须能够连接其他客户端 3.它必须能够与其他客户端通信 对于发现问题有两个明显的解决方案: a.在服务器上保存客户端的列表这样客户端可以获得该列表并联系其他客户端 b.使用一个基础结构比如本文要说的PNRP。 对于连接问题需要考虑P2P应用程序使用的网络的整体结构。 对于通信问题利用通信协议(Tcp/ip,Http)来解决。 发现、连接和通信是所有P2P实现方案的核心。 .NET下如何实现 发现使用System.Net.PeerToPeer类型和PNM进行发现 连接使用PNRP进行连接 通信使用WCF进行通信。 P2P解决方案适用于以下类型应用程序 1.内容发布应用程序如文件共享应用程序 2.合作应用程序如桌面共享和共享白板 3.多用户通信允许用户之间直接通信和交换数据而不是通过服务器通信 4.分布式处理应用程序处理海里数据 5.Web 2.0应用程序在下一代动态web应用程序中合并上述一部分或全部功能。 接下来介绍一下PNRP服务和PNM服务它们是windows下实现P2P的基础服务。 PNRPPeer Name Resolution Protocol对等机名称解析服务用于发布和解析对等机 PNMPeer Near Me服务器用于定位本地的对等机。 PNRP云实际上是由一个种子服务器维护该服务器维护至少一个对等机记录PNRP可以在云中注册对等机记录供云中其他对等机使用。 如何构建P2P应用程序呢 使用System.Net.PeerToPeer和System.Net.PeerToPeer.Collaboration命名空间里的类。 一、P2P资源发布过程 资源发布就是资源所有者向P2P网络云中注册资源的过程它分为以下3个步骤。(1) 创建一个P2P关键词对象(2) 创建一个关联到指定云的注册对象,(3) 进行注册下面的代码演示了如何向所有可用云中注册“0.test”这个名称并将这个名称关联到本机的6000端口通常同时监听这个端口以响应资源访问者的请求的过程PeerName pn new PeerName(test, PeerNameType.Unsecured);PeerNameRegistration pnr new PeerNameRegistration(pn, 6000, Cloud.Available);pnr.Start();二、撤销已发布到云中的资源 只需要调用注册对象的stop方法代码如下。 pnr.Stop();三、资源的发现 就是在云中搜索指定的关键词分以下三个步骤。 (1) .创建一个待搜索的名称对象。 (2) .创建一个名称解释器对象。 (3) .从指定云中检索此名称对象。 下面代码演示了如何从所有可用云中检索名称“0.test”的过程此过程最多返回10条符合要求的记录。 PeerName searchname new PeerName(0.test); PeerNameResolver resolver new PeerNameResolver(); PeerNameRecordCollection results resolver.Resolve(searchname, Cloud.Available,10);四、获取此名称对应的资源 按P2P名称检索到相应的资源名称后假设保存在results集合对象中通过以下方法就可以获取此名称对应的资源了。 foreach (PeerNameRecord record in results) { //获取资源所在的位置 foreach(IPEndPoint endpoint in record.EndPointCollection) { //对方通常在监听这个IPEndPoint与之发起连接即可与之通信或其它交互了 } //获取资源对应的数据 byte[] remoteresourcerecord.Data; } 转载于:https://www.cnblogs.com/FelixBlog/archive/2013/03/29/2989831.html