基于WebRTC技术的实时通信系统的设计与实现
这是一篇关于实时通信系统,WebRTC,对等网络,隐私保护的论文, 主要内容为1.研究背景针对全世界在线通信问题,不同的公司提出了不同的解决方案,希望在满足客户基本通信需求的同时,尽量保证客户可以得到最好的资源。随着通信系统越来越普及,很多问题和挑战从不同的方面呈现出来:一方面是程序员开发程序的问题,另一方面是用户体验的问题。这些问题的出现,使得如何在保证用户间最基础的通讯功能的同时简化用户操作、提升用户体验,成为当今在线通信问题研究的重点。另一方面,目前绝大部分的在线通信系统都是基于C/S架构(即客户机/服务器架构)和B/S架构(即浏览器/服务器架构)开发的,这类集中式的应用模式虽然在一定程度上解决了程序维护和升级的问题,但对于保护用户隐私方面存在很大的隐患。如今,网络安全问题越来越被公众所关注,因此通信中和通信后的隐私保护也成为了在线通信系统需要面对的主要问题之一。2.系统特点及挑战本文尝试以一个用户的角度去考虑解决很多公司碰到的用户体验问题,使用WebRtc这种新的技术去提供更简单且快捷的通信,最后使用对等网络这一应用框架来解决用户的隐私保护问题。在研究过程中,为了提高应用的通信效率、保证用户的通信体验,本文使用WebRtc完成应用程序的开发、集成和测试。WebRtc和HTML5的结合能够在传统的浏览器中实现实时的通信功能,同时WebRtc浏览器实时通信技术的新特性也有助于减少通信软件对基础设备的压力以及对客户端带宽的要求(这个特性使得对等网络中点对点的通信功能成为可能)。正如文中所阐述的,新技术的主要优势体现在用户体验和为应用程序服务器减压方面,WebRtc的API标准,可以使通信内容的创建和游戏、视频、音乐、新闻等媒体信息变的更大众化和分散化。此外,该技术的应用范围也非常广泛,我们期待JavaScript的开发人员可以使WebRTC在更多的应用程序上得到使用。本文将突出介绍WebRtc对应用程序功能的重大作用以及本系统与大部分常见软件相比的优点和缺点。另一方面,本课题的研究重点是建立一个跨越不同浏览器且独立于网络服务器的web应用程序。这一应用的诞生将带来很多的好处,最重要的一个优势是它的轻量。因为聊天记录和文件不保存在服务器中,这将创建一个托管环境来存储聊天记录,在这里服务器仅用于发送信令从而减少主机和运行应用程序所需的资源。在传统框架中,应用程序需要一个服务器和一个数据库,分别用来存储和检索聊天记录,与之相比,本文的这种机制能够减少应用系统处理这些问题所需要的资源消耗。这一应用程序另外一个重要的优势是它的安全性,因为基于相关技术,文件的传输过程无需在服务器上存储,这将为用户之间的安全沟通提供保证,同时这一应用框架也有利于新型通信应用产品的出现。虽然本文设计的在线通信系统有诸多优点,但在应用的开发过程中,有许多的困难和挑战需要被解决。首先,因为这个应用程序缺少成熟产品作为参照,我们并不清楚所设计的应用最终是否可以满足预期需求,这就产生了许多问题。这些问题不是一般性的技术问题,涉及到用户的使用体验方面,需要对不同用户的意见和要求有一定的了解和认识。由于对于这些问题没有直接的解决办法,我们花费了至少两个月的时间通过调查问卷的形式搜集用户的意见,然后尽最大可能提出一个简单易用的应用系统架构。另外,在系统实现方面,因为网上没有关于WebRTC及点对点通信的足够资料,同时很多的软件库由于问世时间较短也存在着很多漏洞,所以通过这些方法对系统进行实现是很具有挑战性的,我们在图书馆和互联网社区中阅读了大量的技术材料,希望能够实现出一个稳定而轻量的实时通信应用系统。3.关键技术WebRTC(Web Real-Time Communications)是一种使不同浏览器客户端间共享音频、视频流和数据的对等实时通信技术。作为一套新型的通信应用框架,WebRTC提供任何浏览器共享应用数据、执行对等通信的能力,在通信过程中,浏览器不需要安装插件或者第三方软件。WebRTC组件支持JavaScript API使用接口,相关接口包括媒体流API(音频或视频数据流)、节点连接API(它允许两个或多个用户进行点对点链接)和数据信道API(使用户能够进行实时游戏、文字聊天和文件传输等操作的应用接口)。WebRTC的主要接口被多种浏览所集成,其中包括Mozilla,Chrome等浏览器,这些接口可以帮助浏览器在没有中心服务器的前提下实现直接相互通信,这样的特性使浏览器就能够在互联网上发送对等的消息(这些消息包括数据对象,文件和视频流等)。与此同时,WebRtc也被多种成熟的聊天系统所应用,其中十分著名的系统包括:谷歌环聊Google Hangout、雅虎通Yahoo Messenger、旧版的Facebook messenger、Wechat(只有离线模式下才应用WebRTC技术)等。除WebRTC外,本应用系统也是用到了多种JS库来辅助实时通信功能的实现,相关的 JS 库包括:Free switch;SIP JS;EasyRTC;P JS;PeerJs,RTCMultiConnectionJS等。其中,Free Switch可以作为实时通信控制中心的安装和实施接口,它可以用于提供VOIP(IP语音)服务,使程序在语音通信方面更为方便快捷;SIP JS使程序可以预先运行一个连接到控制中心的线程,这个线程可以允许用户在同一时间进行打电话、发送信息、媒体视频等多方面的操作;PeerJS是用来开发“去中心化”的浏览器应用,这类应用可以进行点对点操作,不需要收到中心服务器的影响。以上类库促进了浏览器聊天应用程序的发展,基于这些类库,开发人员可以更加简便快捷地实现程序功能,使系统在满足用户沟通需求的同时为用户带来更好的使用体验。另外,由于这些类库都是开源的,任何人都可以通过使用这些类库对应用程序进一步进行完善,因此应用程序将会变得更加简单、易于维护。另外,本系统也使用到了 MongoDB、HTML5、NodeJS、ANDROID 和 CSS3 等互联网新技术。MongoDB是一个基于分布式文件存储的数据库,旨在为 Web应用提供可扩展的高性能数据存储解决方案;Node JS是一个基于Chrome JavaScript运行时建立的平台,用于方便地搭建响应速度快、易于扩展的网络应用;CSS3是CSS技术的升级版本,CSS3语言开发是朝着模块化发展的,这些模块包括盒子模块、列表模块、文字特效、多栏布局等。这些技术都将运用到实时通信应用程序中(如本地存储和缓存浏览器等),这些技术不但帮助开发者减少了任务工作量,同时也给相关的用户提供了更快更好的服务。结合上述技术的特点和JavaScript编程语言的优势,本文开发了这个点对实时通信应用,并且通过JavaScript的相关特性使应用屏幕大小自适应化。4.系统应用框架及实现最终的应用程序是基于EasyRTC库进行开发的,为了利用WebRTC技术的优点,系统使用Node Js编程语言和Web Storm IDE进行开发。系统的需求分析是基于校园环境进行的,我们通过问卷的方式调查了用户关于视听通讯系统的认识和意见,调查结果显示系统的简洁性和易用性是影响用户使用体验的重要指标,因此在设计过程中我们主要对系统的简便性进行了评估,以便满足大部分用户的使用需求。本文所设计并实现的应用程序主要包括三个部分,即:(1)通话模块:这个模块确保用户有能力从不同浏览器发起和接受视频电话;同时,我们会确保所有的浏览器环境都支持和集成该模块,对于已发布的版本,将通过自动升级更新该模块的特性。(2)文本模块:这个模块可确保用户通过点对点的方式(与通话模块类似)使用信道传输数据(这个服务只能在有信号的情况下使用)。(3)文件传输模块:这个模块主要用来完成浏览器间的文件传输,该模块支持不同类型的文件,包括二进制数据、文档以及任何套接字传输协议所支持的文件格式。需要注意的是,该服务和上述两个服务一样,只能在有信号的情况下使用。在三个系统模块中,通话模块提供拨打和接听视频通话的功能,虽然不同用户的浏览器环境不同,但是所有的环境都支持和集成这一功能,不受发布的版本影响。文本模块通过点对点的方式来确保数据传输通道的建立和使用。通话模块和文本模块中的服务器只用于信令不用于其他情况。文件传输模块的主要任务是把数据传输通道集成到浏览器上,该模块使用网络套接字和端口来发送和传递数据,文件传输模块中服务器也仅用于信令。本系统使用对等网络架构来实现基本的在线通信功能。这种通信架构集成了浏览器通过通信通道与服务器的通信能力,同时该架构是对等的而不是集中式的,这种架构的层次结构取决于开发商(可以为两层或三层),根据这种层次结构的设计,开发商可以选择哪一层作为应用层来满足客户的需求。覆盖网络可以看成是一个全连通的虚拟网络,对等网络一般都在物理层实现这种虚拟覆盖网络,并且对等网络的结点与底层物理层不能分开。对等网络架构在TCP/IP层进行数据交换,但这种架构设计通过逻辑链接也允许数据在应用层直接通信,这里的每一个逻辑连接都可以对应到物理层的一个路径。覆盖网络用于索引和同伴发现,使P2P系统可以独立于物理网络拓扑。基于覆盖网络节点相互间的连接,根据覆盖网络内结点的交互方式以及结点的存储方式,我们可以把这种网络结构分为结构化和非结构化(或两者之间的混合)。在对等网络中,客户使用资源的同时也可以分享自己的资源。与客户机—服务器系统不同,随着访问用户的越来越多,对等网络会增加更多的可访问内容资源供用户使用。这种自适应的特性是对等网络的主要优势之一,因为它为减少了用户的安装成本和运行成本。另外,参与者之间的合作也是对等网络取得成功的关键,要想充分发挥这种优势,需要有大量的用户节点提供资源。但在当前大部分的对等网络使用者中通常都包含了大量“自私”用户,这些用户只利用他人的资源而从不把自己的资源主动分享。这种情况会对网络造成很严重的影响,在某些情况下甚至会导致网络的崩溃。所以系统需要对这些自私的用户进行相应的惩罚,例如限制他们享受资源的大小或者降低他们的贡献值。由于网络的不对称性,研究网络的社会属性具有极大的挑战,为了鼓励甚至强制用户节点贡献资源,大量的激励机制被提出。本文所设计的应用程序中包含了一个对等网络的信令服务器,该信令服务器主要是用于统计用户的贡献值,并不直接参与用户间的通信交流过程,系统以此种方式激励用户的参与。在统计过程中,信令服务器给现有的连接分配唯一的ID便于它们之间的通信,并使用Node JS对相应的激励机制进行实现。最后,本系统的存储结构与通常的聊天软件有所不同(虽然一些聊天软件的通信模块也使基于WebRTC开发的,但它的聊天记录存储在一个数据库中,用户可以根据日期顺序来查询聊天记录),基于一种分布式的存储模式,本文设计的应用系统实现了存储结构的“去中心化”,通过这种特性用户的隐私问题可以得到有效的保护。下面是本系统使用到的WebRtc技术开发的应用程序编程接口和软件开发工具包。Twillio(audio only);requestec(product:say page);plivo;Tokbox;openClove;tropo(audio only);weemo;Voximplant(audio only);Priologic(EasyRTC,tawk.com,proPhone);Dialogic;bistri;Apidaze(apiRTC);CafeX;hookflash;ApiZee;Temasys(SkyWayJS);&yet(simpleRTC);RTCMultiConnection(muazkhan,demo);peerjs(data channel);rtc.io;WebRtc.io(no changes for almost a year);WebRtc-data.io(stripped down,data only version of WebRtc.io)。上面提到的 SDK 和 API都是系统使用到的,这些SDK和API也会定期地进行维护和更新。5.结论及展望随着移动互联网的不断发展,传统的通信软件不再能够满足用户的体验需求,同时通信中的隐私保护问题也越来越受到用户的关注。本文针对目前在线通信网络系统中存在的操作不便、用户体验差、隐私保护不到位等问题,提出了一种基于WebRTC技术及点对点对等网络应用框架的在线通信应用平台,该平台可以应用于用户生活中的方方面面。为了提升通信系统的实时性,应用使用到了 WebRTC、MongoDB、HTML5、CSS3等多种新型互联网技术,希望在满足用户实时通信基本需求的同时,尽可能增强用户的使用体验。另一方面,隐私保护问题也是本文所重点关注的问题之一,系统使用点对点对等网络框架来构建出一个分布式的通信系统,在该系统中,聊天记录和文件仅保存在浏览器本地而不保存在服务器中,这将创建一个托管环境来保证用户的隐私问题。最后本文针对具体的系统网络应用环境设计了相应的激励机制,以此来保证对等网络中用户的参与。点对点在线通信系统是一个新兴的行业应用,它让web浏览器具有实时通讯的功能,让企业能够更好地完善他们的网站,让用户改善视频协作和在线会议的水平,等等。另外,点对点在线通信系统的推广也将打破供应商和平台的依赖性,这能够帮助IT组织加速市场投放的时间并且控制成本,解决目前IT行业各种关于连接、安全和控制的挑战。6.文章结构本文各章节内容安排如下,总共分七个章节,分别叙述了软件开发中不同阶段的设计内容以及在该开发阶段中所面临的挑战和解决方案。第一章为背景介绍,包括项目描述、可行性分析以及测试本研究成果的通信能力所用到的相关技术及文献;第二章对系统进行概述,重点说明了系统的主要模块·;系统的上下文环境将在第三章提出,在这里重点描述所有模块的细节以及关于如何改进模块开发过程的考虑和启示,同时也涉及一些代码说明;第四章描述了系统设计方法、标准和约定;第五章介绍了系统中的组件;第六章介绍了系统的版本及安装说明;第七章给出了系统总结和结论。
基于P2P架构的RFID数据清洗模型的设计与实现
这是一篇关于冗余数据清洗,无线射频技术,对等网络,阅读器网络的论文, 主要内容为随着RFID技术的不断发展,应用系统对数据处理的要求越来越高。其中,数据冗余处理和无用数据洪流的处理是信号识别和处理的关键问题。在密集阅读器环境下,阅读器会在短时间内重复扫描相同的标签,或者不同的阅读器由于控制范围的重叠也会对相同标签数据重复读取,从而造成系统中存在大量的数据冗余。这些大量无用数据传到后台系统,严重影响了射频识别系统的识别精度和识别效率,阻碍了RFID技术和上层应用的发展。针对阅读器监测和获取标签数据信息冗余的处理问题,近些年来的研究提出了很多清洗算法,但没有达到应用环境的预期效果。本文从密度阅读器环境下阅读器之间的互联关系入手,提出了基于P2P架构的RFID数据清理模型。 文章对RFID技术和P2P架构特点进行了深入的研究和分析,探索两种技术间的契合点,就阅读器之间互联关系所提供的优势进行了研究。在典型的RFID阅读器密集环境里阅读器之间具有自然的互联关系,这就为引入P2P技术,利用P2P技术提供的分布式模式,解决现有RFID密集阅读器网络环境存在的阅读器之间的数据冗余的问题提供了可能。 利用P2P架构下的DHT机制,本文提出了DRAIL模型用于解决数据冗余问题。在这个系统中每个阅读器既是客户端,可以向其它阅读器提出查询请求,又是服务器端,可以响应其它阅读器的请求。相对于传统的阅读器,DRAIL模型系统中的阅读器更加复杂,更加智能。阅读器主要功能有实现DHT网络覆盖、智能处理新阅读器节点在覆盖网中的动态变化以及消除冗余数据等。通过仿真实验证明,该系统处理冗余数据的能力、平均响应时间、准确率,比传统的数据冗余处理方法有显著的提高。
基于交易特征和反馈评价的P2P网络信任模型研究
这是一篇关于对等网络,声誉,信任机制,信任度,时间哀减的论文, 主要内容为P2P电子商务作为一种新兴的电子商务模式已经在经济发展中得到了广泛的应用。与传统的电子商务模式相比较,P2P对等网络技术在提高获取商品信息的效率方面有很大的优势,表现出更加灵活、高效,更加人性化等特点。而P2P的匿名性、动态性、无中心化的结构特性,给网络用户提供了方便,但也带来了很多新的、不可忽视的安全问题。在一般的生活中,我们要降低交易活动的风险,通常会选择信誉度高的交易对象进行交易,这样能够获得较高的交易成功率。但介于P2P网络中的节点不受限制,信息的交互是用户自发的行为,难以通过传统的机制建立节点间的信任。所以,信任机制怎样才能于P2P网络中使节点之间构建起信任关系,是当下P2P电商模式推广中研究的重点。在电子商务交易中,为尽量规避其中的风险,我们有必要引入信任管理的概念,采用信任管理机制来实现这一目标。而信任机制的可用性取决于信任度的计算方法、信任机制的合理性及其抗干扰能力等。尽管如此,P2P环境下现有的信任机制在很多方面都存在着许多问题。如何选取影响信任度的相关因素是解决这些问题的关键。 本文选取P2P电商贸易的特点进行了深入的分析,探究了信任问题产生的原因,阐述了现有信任模型的不足。为了更好的反映事务交易的特征和节点的信誉真实性,文章于传统信任模型上做出了一些完善和更新,推出了一个不同以往的在P2P网络中以交易特征和反馈评价为基础的信任评估机制。该机制采用交易次数、交易环境满意度、交易金额等多个参数来计算出节点的信任值。并且,为了确定反馈评价的真实性,模型加入了时间衰减函数以及事务影响参数,给出了反馈评价的可信度算法。由于此模型兼顾了大部分的信任影响因子,不仅增加了局部声誉和全局声誉的计算准确性,也使得其安全性得到了升高。 仿真模拟结果显示,此机制可以使得局部声誉和全局声誉的计算准确性获得明显提升,能更好地为正常节点提供保护,抑制恶意节点,提高P2P网络的效率和安全,使网络的健壮性得到增强。与现有的一些信任模型相比,该模型在系统成功交易率的问题上有了较大改进,使节点间建立更加有效的信任关系,能够更好地应用在P2P电子商务系统中,降低恶意交易的概率。
P2P视频点播系统优化研究与实现
这是一篇关于对等网络,流媒体分发,视频点播,缓冲管理的论文, 主要内容为P2P视频点播技术是多媒体通信领域的一个研究热点,本文的研究重点是优化P2P网络结构与资源搜索算法、设计缓冲分块文件结构与替换算法、提高客户端缓冲数据利用率、增强服务端的数据读写性能与可扩展能力、优化P2P通信协议等方面,实现能够适用于复杂网络环境下的高性能P2P视频点播系统。 作者首先分析视频点播系统和视频直播系统的差异性,指出由于用户访问行为复杂,造成P2P视频点播系统中数据共享难度较大的问题,提出客户端缓冲数据分布和缓冲替换算法在P2P视频点播中的重要性。随后作者给出系统使用的关键技术,包括P2P网络架构与资源搜索策略、视频编码与播放技术、数据索引与缓冲策略、客户端缓冲代换算法、NAT穿透技术等。通过对P2P视频点播系统的功能分析,给出系统的总体框架和实现方案。作者将系统划分为ID管理服务器、点播目录服务器、点播源服务器、点播源镜像服务器、客户端、数据库服务器、后台管理服务器7个子系统,并给出每个子系统的功能和设计方案。作者详细介绍在系统中用到的数据结构和相关算法,重点是源文件索引结构、服务器端二级缓冲结构与替换算法、客户端缓冲分块文件结构、客户端缓冲替换算法、P2P节点与缓冲数据的映射关系。作者还详细描述系统中服务器之间、客户端与服务器、客户端之间的主要通信协议。通过对真实系统运行日志数据的分析,说明服务端的资源消耗情况、客户端的缓冲分布和运行效果。实验结果表明本文实现的系统是一个高效率的P2P视频点播系统,在与单播系统使用同样硬件资源的条件下,能够支撑数倍的并发用户数量,具有很大的应用价值。 总之,本研究在大规模P2P视频点播系统的网络架构设计、节点资源搜索调度、视频源存储索引方法、分块缓冲文件结构、缓冲替换算法、服务器分布式部署架构等方面进行了较具创新性的工作,提出一系列新颖的解决方案、实现策略和方法,并通过大量的实验证实本文工作的理论意义和应用价值。本文的研究对优化视频点播系统结构与客户端缓冲利用率、改善系统资源利用效率、减少用户点播响应时间、提高系统容量等方面具有较大的贡献。随着时间的推移和技术的发展,本文的实践意义将在未来的多媒体通信技术与业务发展的应用和研究中得到不断体现和考验。
大规模对等网络中节点统计特性分析及应用
这是一篇关于对等网络,统计特征分析,Gnutella,查询,结果缓存,负载平衡的论文, 主要内容为目前各类P2P网络的规模越来越大。对于文件共享的P2P网络,同时在线的用户数通常可以达到数百万,而即时消息类的P2P网络则拥有更多的并发用户数,但随之而来的很多问题也逐步出现,其中包括: (1)人们目前对大规模P2P网络发展的情况和特点并不十分了解,这种情况的出现往往使得研究工作缺乏针对性; (2)由于缺乏真实P2P系统中网络结构、用户行为等信息,很多模拟环境往往只能通过一些启发式的模型来生成,因此与真实系统中的情况存在不一致的可能; (3)缺乏现有系统运行中的各类性能指标和统计数据严重影响了未来P2P系统的设计。 上述这些现象很好的说明了当前P2P网络统计特征分析的迫切性和必要性。为了解决这些问题,我们在当前流行的Gnutella0.6平台上开展了相应的统计特征分析工作,并提出了一些应用,其内容包括: (1)设计了一个高效的分布式协作P2P爬虫系统,解决了Gnutella0.6协议上的统计数据收集问题; (2)从节点在线时间、节点角色选择、节点连接情况、共享文件以及查询消息分布等方面较为全面的分析了Gnutella系统的统计特征; (3)从时间序列的角度分析了Gnutella系统中查询消息流的特性,并研究了查询消息数量的可预测性; (4)提出了Gnutella系统中基于该模型的结果缓存机制和Chord系统中同样基于该模型的动态负载均衡机制。 我们的工作的主要意义在于 (1)发现了Gnutella0.6中新出现的一些重要的现象和问题,如节点角色的选择问题等,为将来的研究提供了基础; (2)提供了很多精确的统计数据,为今后的P2P系统建模提供了重要的依据; (3)作为P2P系统流数据的挖掘方面的首个尝试,提出了从时间序列角度研究P2P数据流的方法;
P2P-CDN视频点播系统中文件分片及数据预取策略研究
这是一篇关于对等网络,视频点播,文件分片,数据预取的论文, 主要内容为随着互联网快速发展和智能手机日渐普及,视频业务在网络流量中所占的比例日渐增长。视频业务主要包括视频直播与视频点播业务,其中视频点播业务是互联网最重要的流媒体业务之一。传统客户端/服务器(Client/Server,C/S)架构的视频点播系统中,由于视频点播用户急剧增加,导致中心服务器负担剧增,服务能力下降,严重限制了系统快速发展。近年来,内容分发网络(Content Delivery Network,CDN)技术与对等网络(Peer-to-Peer,P2P)技术相继被应用到视频点播系统中,很好地缓解了由于用户访问量过高导致的系统响应迟缓问题。但CDN技术存在着扩展性差、系统维护成本过高的问题,而P2P系统也存在节点管理困难等问题。为解决这些问题本文采用Spring Cloud微服务框架实现了一种基于P2P-CDN的视频点播系统,使系统实现复杂性降低、模块件通信健壮性更强。另外,该系统集成了P2P与CDN双方的技术长处,可以有效降低中心服务器的压力,使系统的扩展性得到提升。通过分类分析现有文件分片算法的优缺点,本文提出了可转换传输单元的等大小分片算法。该算法不仅保持了等大小分片算法的简单性,还具有根据网络状况改变分片传输单元的灵活性,保证分片在不同的网络环境中保持相对稳定的传输速度。实验结果表明,对比现有的典型分片算法,本文提出的分片算法可以保证较高的分片效率,同时能够很好适应不同的网络传输环境。为进一步提高系统整体性能,本文基于定位满意度对数据预取策略进行了优化,采用多属性决策(Multiple Attribute Decision Making,MADM)理论对预取数据块间隔(即锚点间隔)问题进行建模分析,利用TOPSIS(Technique for Order Preference by Similarity to an Ideal Solution)算法寻求MADM问题的最优解。通过对锚点策略的优化,得到了最优数据预取策略,我们将这种根据起播延时(delay)和定位满意度(satisfaction)计算得到的优化锚点(anchor)数据预取策略命名为DSA策略。通过对比实验证明,DSA策略可以保证较低的起播延时,利用较少的额外带宽,进一步提高定位满意度。由此表明,DSA策略在数据预取方面起到了很好的优化效果。
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈 ,原文地址:https://m.bishedaima.com/lunwen/54869.html