p2p实现:ESFramework扩展的EsfP2P -- 基于ESFramework的P2P实现

  好久没有写有关ESFramework文章了曾很早就承诺过要写篇介绍基于ESFramework实现NAPT P2P文章今天终于能抽出时间做这件事

  网络地址转换NAT(或者NAPT)基本理论知识网上有很多相关资料不是很清楚朋友可以先了解下什么是NAT、以及为什么要使用NAT使用NAT个非常常见场合就是P2P技术要使两个隐藏在区别局域网后面机器能够相互通信并不是件非常简单事情这两台机器没有公网地址相互的间是无法直接通过IPEndPo访问NAT解决了这个问题虽然并不是所有操作系统都完整支持NAT幸运主流操作系统般都是支持

  通常NAT都支持UDP支持TcpNAT实现非常少见(也非常难以实现)我们现有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提交(发送)消息就可以了而不用关心下层消息路由途径

  回顾下图示:





  当客户端登录时INaptOutter.P2PLogon思路方法;退出时INaptOutter.P2PLogout思路方法;GetFriendP2PAddress用于获取所有在线好友P2P地址

  客户端个重要组件是P2PSessionChecker它用于定时向所有在线好友发送P2PCheckMessage(通过INaptOutter.SendP2PCheckMessage思路方法)这样那些后上线客户也可以通过这个P2PCheckMessage来判断P2P Session建立

  还有个客户端消息处理器P2PSessionPassiveDealer它实现了IDataDealer接口也是个简单消息处理器用于在客户端处理所有和P2P Session搭建相关消息

  有关EsfP2P主要组件就是这些那么如何使用它来构建P2P应用了?(使用EsfP2P前提是使用了ESFramework)

  (1)首先在个公共dll中配置P2PSessionMessageType它将被服务端和客户端使用

  (2)在服务端配置P2PSessionDealer组件并将其装配到处理器工厂

  (3)在服务端配置UserP2PAddressManager组件并通过UserP2PAddressManagerBridge桥接UserP2PAddressManager和IUserManager

  (4)在客户端配置NaptOutter组件

  (5)在客户端配置P2PSessionPassiveDealer组件并将其装配到客户端处理器工厂

  (6)在客户端配置NaptP2PChannelManager组件并将其装配到IMessageTransceiver组件

  (7)在客户端配置P2PSessionChecker组件并在登录时其Initialize思路方法

  EsfP2P.dll可以到ESFramework 可复用应用框架(序)下载部分下载试用

  感谢关注!



Tags:  显示文件扩展名 收付实现制 p2p实现

延伸阅读

最新评论

发表评论