ESFramework_.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ESFramework_

ESFramework扩展之EsfP2P -- 基于ESFramework的P2P实现 Posted on 2006-08-15 15:40 zhuweisky 阅读(3359) 评论(4) ?编辑 收藏 所属分类: ESFramework ??? 好久没有写关于ESFramework的文章了,曾很早就承诺过要写一篇介绍基于ESFramework实现NAPT P2P的文章,今天终于能抽出时间做这件事。 ???? 网络地址转换NAT(或者NAPT)的基本理论知识,网上有很多相关资料,不是很清楚的朋友可以先了解下什么是NAT、以及为什么要使用NAT。使用 NAT的一个非常常见的场合就是P2P技术,要使两个隐藏在不同的局域网后面机器能够相互通信,并不是一件非常简单的事情,因为,这两台机器没有公网地 址,相互之间是无法直接通过IPEndPoint访问的。NAT解决了这个问题,虽然并不是所有的操作系统都完整的支持NAT,幸运的是,主流的操作系统 一般都是支持的。 ????通常,NAT都支持UDP,支持Tcp的NAT实现非常少见(也非常难以实现)。我们现有的P2P技术也几乎全是基于UDP的。 ????相互通信的两台机器,首先要通过服务器建立起P2P Session,这个过程必须有服务器的参与,否则Session无法建立起来。在P2P Session建立完成之后,两台机器之间就可以进行P2P通信了,而不必再经过服务器中转。 ????基于ESFramework的扩展EsfP2P就是C#版本的一个P2P实现,它用于协助P2P Session的建立。使用EsfP2P,我们写程序时不用再关心与如何搭建与P2P Session的一切事宜。 ????在P2P Session能被EsfP2P自动建立后,对应的IP2PChannel就可以使用了,你还记得IMessageTransceiver吗? IMessageTransceiver的智能在于,如果P2PMessage可以通过IP2PChannel直接发送,则将其交给 IP2PChannel,否则将其提交给IServerAgent由服务器转发。这样应用只需要直接使用IMessageTransceiver提交(发 送)消息就可以了,而不用关心下层的消息路由途径。 ????回顾一下图示: ????ESFramework的扩展之一NaptP2P,就是用于自动搭建各个IP2PChannel,并使之可用。一旦Client1和Client2之间的IP2PChannel构建成功,它们之间的通信就可以直接进行。 ????说了这么久的EsfP2P,对其还没有感性的认识。下面我们来详细介绍它。 ????EsfP2P的主要目的是协助P2P Session的搭建(即各个IP2PChannel实例的构建),这需要客户端和服务端相互协作来完成这件事情。 ????关于NAT的“hole”(“打洞”)过程以建立P2P Session的理论,可参阅其它相关资料(如/)。这里列出EsfP2P采用的“hole”过程: (1)服务器管理所有在线用户的Udp地址 (2)ClientA登录时从服务器获取所有在线好友的Udp地址列表 (3)ClientA初始化时,根据好友地址列表向所有在线好友发送P2PCheckMessage (4)以后ClientA定时向NaptP2PChannelManager管理的各个通道发送DirectP2PCheck消息 (5)当某个Client收到P2PCheckMessage,则将对应的用户注册到NaptP2PChannelManager (6)当某个Client上线时,服务器通知所有其它用户,用户接到通知后,立即向该Client发送P2PCheckMessage (7)当某个Client下线/掉线时,服务器通知所有其它用户,用户接到通知后,从NaptP2PChannelManager中注销下线的用户 ????EsfP2P通过执行上述的要点,可以保证P2P Session的正确建立。在实现这些要点时,需要引入一系列类型的消息,这些消息类型可由P2PSessionMessageType的属性展现: ????AskForFriendP2PAddresses 消息用于客户端向服务器请求所有好友的P2P地址;P2PCheckMessage用于Check两个端点之间的P2P Session是否成功建立,一旦一个端点接收到了另一个端点发来的P2PCheckMessage,就说明两个端点之间的P2P Session已经建立成功了。P2PLogon和P2PLogout是客户端登陆或退出时发送给服务器的消息。SomeOneLogon和 SomeOneLogout是当某个用户上线、下线时,服务器给其它用户的通知。 ???

文档评论(0)

sd44055 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档