我要投稿

ProudNet使用方法#5:客户端间的P2P 通信

时间:2016-11-01 12:46 作者:uiop 阅读:849

扫描二维码关注公众号,可以查询淘宝、京东商品优惠券
ProudNet究游戏软开发的游 &网络引擎。


本章端之的直接通信,即P2P通信述。
一般P2P
1.12建立P2P接。
2.接成功后客12信息。
但是ProudNet不是如此操作,而是服器管理客端之接。这样做的原因是,假如客1被黑客攻接任何客端收信息生的患。
如以下的方式:
1.送客12接的命令。
2.12接到P2P时响应
3.12信息。
ProudNet 具有P2P念,P2P是由HostID识别象,P2P可添加0以上的客端,也可添加到服端。P2P中客端之利用P2P行通信。
P2P可自行定。如:一聊天室,游玩家的房或者MMO中假域中的玩家。
然,一端可入多P2P,重也可以。
C1,C2 要建立一个组照一下代
1.  [C++]   
2.  HostID list[2];  
3.  list[0] = C1;   
4.  list[1] = C2;   
5.  G =s->CreateP2PGroup(list, 2); // 第二要素=数组的大小
6.      
7.  [C#]   
8.  G = s.CreateP2PGroup({C1,C2});


G中包含了P2PHostID,服器即可使用G
端如何知道G存在?关联如下。
1.  [C++]  
2.  c->Set_OnP2PMemberJoin([...]  
3.      (HostIDmemberHostID, // [1]  
4.      HostIDgroupHostID, // [2]  
5.      int memberCount,  // [3]  
6.      const ByteArray&customField)   
7.  {  
8.      G =groupHostID;     // [4]  
9.     Peers.Add(memberHostID);   
10. });  
11.   
12.   
13. [C#]  
14. c.P2PMemberJoinHandler =   
15.    (memberHostID, // [1]  
16.    groupHostID,  // [2]  
17.     memberCount,  // [3]  
18.     customField)=>{   
19.     G =groupHostID; // [4]  
20.    Peers.Add(memberHostID);  
21. };  


[1]: memberHostID表示指向的主机及本地P2P接。
[2]: memberHostID代表与进入了哪个P2P
[3] : P2P组进入多少主机。
[4]: 要添加代的部分。需要自身在哪个P2P和此通信的主机是行保存。
端收到P2P通信的事件后,客端即可直接给对P2P信息。
使用SendUserMessage 或者RMI即可。SendUserMessage 或者RMI 收信象添加其主机的HostID即可送到P2P。假添加到G将队G中的所有主机同时发据。
1.  [C++]  
2.  c->SendUsermessage(G,RmiContext::ReliableSend, data, length);  
3.   
4.   
5.  [C#]  
6.  c.SendUserMessage(G,RmiContext.ReliableSend, data);


ProudNetP2P可添加3以上的客端。于已建立的P2PJoinP2PGroup 更多的主机添加到P2P于新添加的主机和之前建立的主机用OnP2PMemberJoin事件行接收。
P2P中要除主机NetServer.LeaveP2PGroup即可,要消除P2P组调DestroyP2PGroup即可。此,客端通OnP2PMemberLeave了解
即使建立P2P通知端也要行打孔。打孔需要几秒时间,在客接收信息的期NetServer 理延在后端行打孔。
打孔成功后通知端, OnChangeP2PRelayState事件。
1.  [C++]  
2.  c->Set_OnChangeP2PRelayState([...]  
3.      (HostIDremoteHostID, ErrorType reason) // [1]  
4.  {  
5.     ...  
6.  });  
7.   
8.   
9.  [C#]  
10. c.ChangeP2PRelayStateHandler =  
11.     remoteHostID,reason) =>{  // [1]  
12.    ...  
13. };  


[1]:端打孔状态发生了何且告知改状态。假 reason=Ok代表打孔成功,其它值代表打孔消失,示如何消失的状态
要想利用RMIP2P通信,proxystub 附加到所有的NetClient 中。如下所示:
1.  [MyGame.pidl]   
2.      
3.  globalMyGameP2P  //[1]  
4.  {   
5.     Player_Move([in] Vector3 position);   
6.  }   
7.      
8.      
9.  [C++]   
10. MyGameP2P:: ProxyP2PProxy;  //[2]  
11. MyGameP2P::StubFunctionalP2PStub;   
12.     
13. P2PStub.Player_Move_Function =[...]PARAM_MyGameP2P_Player_Move{  //[3]  
14.     ...  
15. };   
16.     
17. c->AttachProxy(&P2PProxy);  //[4]  
18. c->AttachStub(&P2PStub);   
19.   
20. P2PProxy.Player_Move(G,RmiContext::UnreliableSend, myPosition); // [5]  
21.     
22.     
23. [C#]   
24. MyGameP2P.ProxyP2PProxy;  //[2]  
25. MyGameP2P.Stub P2PStub;   
26.     
27. P2PStub.Player_Move = (sendFrom,rmiContext, position)=>{  //[3]  
28.     ...  
29. };   
30.     
31.c.AttachProxy(P2PProxy);  //[4]  
32. c.AttachStub(P2PStub);   
33.   
34. P2PProxy.Player_Move(G,RmiContext.UnreliableSend, myPosition); // [5]  


[1]: P2P通信用RMI.
[2]: P2P RMI proxy stub的一个实.
[3]: P2P接收RMI理函.使用者自行定.
[4]: 附加[2] 例到NetClient
[5]: P2P .
总结
1.P2P直接通信的CreateP2PGroup
2. OnP2PMemberJoin了解客端之P2P通信。
3. RMI或者SendUserMessage P2P信息。
4.  要使用P2P RMIProxyStub都要附加到NetClient


最新评论

uiop2016-11-02 11:44
ProudNet是研究游戏软件开发的游戏服务端 &网络引擎。
uiop2016-11-03 12:26
好好宅在家里 玩玩游戏什么的
uiop2016-11-04 14:43
希望对感兴趣的人有所帮助
uiop2016-11-07 13:21
少壮不努力,老大徒伤悲
uiop2016-11-08 14:42
ProudNet为游戏开发提供更有效的解决方案和市场分析在进行此问卷调查
«12345»Pages: 1/5     Go
我要投稿 我要评论
插入url链接 添加表情
限 100000 字节
响应相关主管单位规定,关闭回帖发帖功能
[VB毕业设计] [ASP毕业设计] [JAVA毕业设计] [JSP毕业设计] [PHP毕业设计] [asp.net毕业设计] [.net毕业设计] [网络毕业设计] [Delphi毕业设计] [VC毕业设计] [VF毕业设计] [机械毕业设计] [工艺毕业设计] [模具毕业设计] [其他毕业设计]
站长联系 cccbbsnet#163.com 本站系公益性质网站,站内广告维系本站运作。欢迎赞助本站。
大学生计算机相关方向|软件编程|网络工程|web开发|数据库技术|学习资料等
本社区仅供学习计算机相关技术所使用,访客发言不得违反国家法律法规
Time now is:12-12 12:00, Gzip enabled 蜀ICP备07004838号Powered by cccbbs.net v7.5 SP3 Code © 2003-06 cccbbs
计算机毕业设计