【原】P2P应用的探究

     什么是P2P(peer 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的基础服务。   
PNRP(Peer Name Resolution Protocol,对等机名称解析服务),用于发布和解析对等机;
PNM(Peer 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[] remoteresource=record.Data;
}

 

转载于:https://www.cnblogs.com/FelixBlog/archive/2013/03/29/2989831.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何设置多个图层层叠关系_如何玩转 XMind 中的多种思维结构?

熟悉 XMind 的用户都知道,XMind 支持多种思维结构,并且不同思维结构可以混用。每一个分支都可以是一个不同的结构,让你不受限制、自由地进行思维的发散和整理。这个是目前其他思维导图工具少有的。在 XMind 中,你可以用思维导图、…

python修改html表格,使用styles和css更改pandas dataframe html表python中...

这需要几个步骤:首先导入HTML并重新输入from IPython.display import HTMLimport re你可以通过to_html方法得到html pandas.df_html df.to_html()接下来,我们将为html表和我们要创建的样式生成随机标识符.random_id id%d % np.random.choice(np.arange(1000000))因…

PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择

2019独角兽企业重金招聘Python工程师标准>>> 这里是我在搭建php环境时收集的资料供大家参考: 现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢?其实PHP官网给出了答案&…

Silverlight与WCF之间的通信(5)silverlight应用和wcf服务的发布方法

上一篇博文中有朋友问到关于silverlight程序发布的问题,上一篇写的是silverlight访问host在console上的wcf,其实关于wcf和silverlihgt通信的问题有好几种方式,这里列举了一下 客户端和服务端采用http协议通信(分两种,同…

常用函数(字符和字符串)

Pascal常用的字符处理标准函数有5个 (1)ord(ch) 求字符ch对应的ASCII代码值;如 ord (A)结果为65,ord(true)结果为1,ord(false)结果为0(2)chr(x) 求x(x为1…255…

python搜索文件内容_python实现搜索文本文件内容

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存储NAS是一个可共享访问&#xf…

html单张图片效果,jquery+html5实现单张图片上传预览

js:if (window.File && window.FileReader && window.FileList && window.Blob){//Blob是计算机界通用术语之一,全称写作:BLOB (binary large object),表示二进制大对象。//全部支持function handleFileS…

通向成功的23个方法

1.设立大目标和小目标。总要保持向前看,但不要忘记你今天的成绩。 2.每天都设立新的目标。因为成功是一个过程,所以要确保总是有新的事情要完成。 3.逐一完成每周的事情。将时间表分成容易做到的几块,并且单独完成每一块。 4.每天至少完成一件…

科讯SQL标签调用文章技巧

http://qdh68.blog.163.com/blog/static/13756126201241584835332/转载于:https://www.cnblogs.com/zhangzhu/archive/2013/03/31/2991754.html

小程序引用其他页面js_来聊聊小程序页面之间如何通信

小程序页面之间如何通信?首先将通信的模型列举出来, 分为以下几种兄弟页面间通信父路径页面向子路径页面通信子路径页面向父路径页面通信通信的方式localStorage 本地存储globalData 全局对象eventBus 发布订阅PageModel 缓存整个pageModel至globalDataLocalStorage利用onShow…

html meta页面自适应,【转载·收藏】 html5手机网站自适应需要加的meta标签

webapp开发初期,会碰到在pc端开发好的页面在移动端显示过大的问题,这里需要在html head中加入meta标签来控制缩放下面是对于这个标签的具体说明:viewport 语法介绍:content包含有以下几个属性:height [pixel_value | device-height] ,width [pixel_value | device-w…

用碧海潮声制作的宋体(雅黑宋体)替换Windows7原生的火柴棍式的宋体

第一眼见到Windows7的时候,界面真的非常漂亮,但是当查看文件属性的时候,里面宋体出奇的难看,网上有很多在XP里替换宋体的方法,但是到了Windows7里就不那么好用了,经过多次查找相关方法,终于使用…

最近2个月的生活

最近2个月,心情动荡不定。时而快乐,时而悲伤,时而激动,时而淡定。最近的故事还是比较多的,就按编号来分别描述吧.1.周五,公司举办了2012年年会。 本次年会,是 帅哥和美女展示身材和才艺的机会。…

json动画_three.js动画(四)

ThreeJS的动画系列分为:基础动画、相机控制、变形动画、用骨骼和蒙皮制作动画以及使用外部模型创建动画。用骨骼和蒙皮制作动画用骨骼来做动画时,移动一下骨骼,Three.js必须决定如何相应地迁移附着在骨骼上的皮肤,一起来看吧~~~举…

如何做PHD (1)

做PHD两年了,经验不多,从朋友、导师、教授、名人得到的做PHD的经验却很宝贵,为了不让自己忘记,特此记录,希望对各位已经是PHD或即将成为PHD的朋友有所帮助。 1.多读文章 做PHD与做硕士不一样,计算机的硕士…

sqlite3x library

sqlite3x - C wrapper of SQLite API. http://sourceforge.net/projects/int64/files/SQLite3%20C%2B%2B%20Wrapper/ https://github.com/ptrv/sqlite3x http://wanderinghorse.net/computing/sqlite/ Appendix http://www.sqlite.org/转载于:https://www.cnblogs.com/androidm…

html5监听动画结束,js判断css动画是否完成 animation,transition

气死了,发现这些鸟人讲事情都讲一半,害死初学者。css动画有两种,animation,transition,所以分开来讲。1、animation:css定义 #left1{}html定义:安全那么我们就用#left1来获取元素:/* 监听变换事…

[算法]不用第三个数交换2个数的位置

int a 10; int b 20; 第一种方法: a a b; b a - b; a a - b; 第二种方法: a a ^ b; (^ 语言中是异或的意思,同为0 异为1 1 ^ 1 0, 0 ^ 0 0, 1 ^ 0 1) b a ^ b; a a ^ b; 第三种方法 (这种方法容易越界&#xff09…

四十之后才明白

四十以后才明白:好朋友是应该相互欣赏的,而不是相互利用的。 四十以后才明白:饭应一口一口吃,事要一点一点做。没有一蹴而就的事情,所以就不应该疲于奔命。中年,应该活得从容。 四十以后才明白&#xff1a…

session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

前言公司有一个 Web 管理系统,使用 Tomcat 进行部署。由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作。起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部署。后来随着用的人越来越多&#x…