【Unet】TransPort Layer API

发表于2017-08-23
评论0 1.8k浏览

TransPort Layer API

除了上面的简易high Level API,Unity还提供了较低级别的传输层API,下面就给大家介绍下TransPort Layer API。
TransPort Layer API:能够发送和接受消息闭关表示为数组的字节,还提供了大量不同的“服务端质量”,以适应不同的场景,支持基础的网络通信服务。简单说:给你来点更加具有自由的网络通信服务。
• 优化基于 UDP 协议。
• Multi-channel design to avoid head-of-line blocking issues 多通道设计,以避免头的线阻塞问题
• 每个通道支持各种levels 的服务质量 (QoS) 。
• 灵活的网络拓扑结构,支持对等 或 客户机-服务器体系结构。


1、两种协议:
01-通用通信UDP

典型工作流程
(1)初始化网络传输层 copy

  1. // 不带参数初始化  
  2.        NetworkTransport.Init();  
  3.        // 设置最大数据包为500  
  4.        GlobalConfig globalconfig = new GlobalConfig();  
  5.        globalconfig.MaxPacketSize = 500;  
  6.        NetworkTransport.Init(globalconfig);  


(2)配置拓扑网络 copy

  1. ConnectionConfig config = new ConnectionConfig();  
  2.         // QosType.Reliable 可靠连接,确保信息传输安全  
  3.         byte reliableByteId = config.AddChannel(QosType.Reliable);  
  4.         // QosType.Unreliable 不可靠连接,传输速度快,不能保证信息传递  
  5.         byte unreliableByteId = config.AddChannel(QosType.Unreliable);  
  6.         // 网络拓扑的定义, (连接使用配置信息,允许连接数)  
  7.         HostTopology topology = new HostTopology(config, 10);  

(3)创建服务器主机
  1. // 创建主机服务(端口号:8888)  
  2.        int intHostID = NetworkTransport.AddHost(topology, 8888);  


(4)开始通信 copy
  1. private byte error;  
  2.     private byte[] buffer;  
  3.     private int bufferLength = 1024;  
  4.   
  5.         // 先将不同的命令发送主机并检查状态  
  6.         // 返回一个给此链接的ID  
  7.         int connetionID = NetworkTransport.Connect(intHostID, "192.168.1.131", 8888, 0, out error);  
  8.         // 此命令发送断开链接的请求  
  9.         NetworkTransport.Disconnect(intHostID, connetionID, out error);  
  10.         // 发送信息,将消息存储在缓存区消息长度为bufferLength  
  11.         NetworkTransport.Send(intHostID, connetionID, reliableByteId, buffer, bufferLength, out error);  
  12.   
  13. // 检测主机状态:  
  14. void Update () {  
  15.         myConnectinID = NetworkTransport.Connect(hostId, "192.168.1.133", 8888, 0, out error);  
  16.         // 此函数返回来自任意主机的事件(recHostId返回主机ID)  
  17.         NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionID, out reliableByteId, recbuffer, bufferSize, out dataSize, out error);  
  18.          switch(recData)  
  19.          {  
  20.             case NetworkEventType.ConnectEvent:  
  21.                 if (myConnectinID == connetionID)  
  22.                 {  
  23.                     // 主动连接请求成功  
  24.                 }  
  25.                 else {  
  26.                     // 其他人连接到我  
  27.                 }  
  28.   
  29.                 break;  
  30.         }  
  31.  // 此函数为检测主机ID  
  32.  // NetworkTransport.ReceiveRelayEventFromHost  
  33.   
  34. }  

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引