c# 实现p2p文件分享与传输系统

c#实现P2P文件分享与传输系统 

一、模型

  P2P的概念大家都不陌生,也就是所谓的“点对点传输”,即不直接通过服务器,在两台或多台客户端之间传输数据,实现信息交流和资源共享。P2P技术已经发展了很多年了,虽然理论上已经发展了很多的模型,但在实际的网络环境中(尤其是镇里这种环境),究竟怎样的网络结构才具有较好的稳定性和较高的传输性能,还是有很大的争议,每家做P2P的网络公司都会有不同的见解。当前,P2P技术应用的主要目的还是减轻服务器工作压力,本人不才,之前曾在国内某网络软件公司里担任p2p相关的流媒体项目开发,对于P2P技术所创造的能力和带来的价值深有体会,也曾被它的复杂性所折磨的痛苦不已,不过,这也是我所珍惜的一笔宝贵的知识财富。

  似乎扯远了。。。赶紧回来,前段时间做了一个c#实现p2p文件传输系统的项目。以前都是用c/c++,这还是第一次用c#来做这种项目,由于用c++比用c#要早的多,所以写c#程序不免会带些c++的习惯,不过不影响程序整体。第一步:设计。对于“文件分享和传输”这种典型的p2p应用,可以使用成熟的模型和框架:

  上面这个图里面有几个固定的端点:Peer、Tracker Server、NAT Server和Source Server,还有两个游离的元素:数据和下载节点,它们构成了一个完整的p2p网络。在这个网络中,它们各司其职,维系着网络的运转。

  • Peer 整个系统的核心所在,主要负责资源提供和资源索取,驱动着网络的运行。也只有Peer,是唯一的一个必须存在的元素。
  • Tracker Server 如其名所述,动态、实时地监视着整个网络中peer节点的状态和资源分布,向下载节点提供p2p资源查询的重要功能,通过tracker server,下载节点可以迅速而准确的获取网络中拥有资源的节点列表,展开p2p下载。
  • NAT Server 负责NAT穿透,也形象的称为“打洞”。对于藏在受限型NAT网络后面的节点,不通过NAT Server做穿透的话,是无法和NAT后面的节点进行通信的,而目前大部分人是没有公网IP的,NAT Server对于组建p2p网络十分的重要。对于NAT穿透,我会在后面的文章中解释。
  • Source Server 负责资源提供或资源发布,一般网络公司建立的p2p网络,会有这种服务器来发布需要推广和扩散的资源。

  这个模型基本涵盖了p2p网络架构的主要几个部分,在具体实施的时候会根据不同的资源类型有不同的变化,通常会更加的复杂,当然,也有可能更简单。比如,DHT(Distributed Hash Table) 网络,这种网络,以不需要服务器的参与来完成p2p的查询与传输为主要特点,例如大家常用的eMule中的KAD网络,就是一种DHT网络。但其实,DHT中,是peer节点,负责了Tracker Server和Source Server的工作。也就是peer变得比较复杂,如果把它拆开来看,也基本就是这个模型。Peer的复杂化,可以降低服务器运行压力,但就牺牲了实时性,对于实时性和准确性要求高的应用,例如流媒体,不太适合DHT,当然,这并不妨碍DHT作为辅助手段来探知更多的资源节点。

  我要做的这个“EasyP2P”文件分享与传输系统,目前暂时不需要Source Server,由Peer负责Source Server的功能,也就是资源的发布;Tracker Server负责节点和资源的查询;NAT Server依然负责打洞。于是,变化成如下结构:

  这就是EasyP2P系统的模型,接下来,将根据这个模型,来具体设计整个网络的架构和运行流程。

文章版权haibindev,转载请注明作者和出处,谢谢合作~

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏哲学驱动设计

《架构师》反思:系统可靠性

最近系统学习了一个系统可靠性及其相关知识,今天在这总结一下。 首先,什么是系统的可靠性呢?系统的可靠性是指在规定的时间内及规定的环境下完成规定功能的能力,也...

3235
来自专栏hotqin888的专栏

ONLYOFFICE与MS Office Online对比

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hotqin888/article/det...

4001
来自专栏CSDN技术头条

【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学

【导读】徐汉彬曾在阿里巴巴和腾讯从事4年多的技术研发工作,负责过日请求量过亿的Web系统升级与重构,目前在小满科技创业,从事SaaS服务技术建设。 在过去的工...

20910
来自专栏精讲JAVA

前后端分离实践的架构设计

前后端分离的项目开发策略已经不是什么新鲜东西了,网上介绍这方面的文章非常多。我自己是在14年的时候接触到的,对这种开发策略一直爱不释手,不管新老项目都会首先用前...

1313
来自专栏沃趣科技

数据库容器化|未来已来

导语:“你不是不够好,你只是过时了”这句话用到 IT 行业特别合适,每隔一段时间都会有新的技术出现, 让码农们应接不暇。借着回顾DBA工作中的几个时期,跟大家分...

5096
来自专栏EAWorld

容器时代的DevOps部署

本文目录: 一、企业应用的部署发展 二、普元容器云与DevOps的部署设计 三、面向微服务的部署设计 四、容器组装化部署 五、容器云集成之路 六、结语 一、企业...

5857
来自专栏聊high云的专栏

腾讯云高可用和容灾解决方案

实现业务连续性的技术手段通常包括高可用性和灾备恢复两种,所以本文讲述的是在腾讯云上实现业务连续性的解决方案。

2.6K18
来自专栏SEO

Google新动作:处理重复内容

32910
来自专栏腾讯云中间件团队的专栏

跨园区容灾,升级不停服:高可用负载均衡集群实践

近期,针对一些客户对腾讯云产品可用性的问询,腾讯云基础产品团队对负载均衡产品的原理做出详细阐述,并希望通过对腾讯负载均衡集群底层架构的实现的讲解分析,揭示其强劲...

1.9K0
来自专栏带你撸出一手好代码

使用windows 10的8大理由

相对于在不情愿的情况下被微软强制将系统升级为windows 10和现在还在着使用windows 7的电脑同学,我是windows 10系统的积极拥护者。当win...

34811

扫码关注云+社区

领取腾讯云代金券