MQTT通訊協議在Unity中的應用之二—Unity3D C#實現

上一篇講解了MQTT協議在JS實現,經過和Unity3D交互實現通訊,由於對JS不是特別精通,因此講得比較粗略。這一篇中,介紹Unity3D 實現MQTT協議通訊,將細緻講解過程
MQTT是IBM開源的一個通信方式,是一個基於TCP的發佈訂閱協議,MQTT使用相似MQ經常使用的發佈/訂閱模式,起到應用程序解耦,異步消息,削峯填谷的做用。
優勢:

html

  • 使用發佈/訂閱模式,提供一對多的消息發佈,使消息發送者和接收者在時間和空間上解耦。
  • 二進制協議, 網絡傳輸開銷很是小(固定頭部是2字節)。
  • 靈活的Topic訂閱、 Qos、臨終遺言等特性。
    缺點:
  • 集中化部署,服務端壓力大,須要考慮流程控制及高可用。
  • 對於請求/響應模式的支持須要在應用層根據消息ID作發佈主題和訂閱主題。

適用範圍:
在低帶寬、不可靠的網絡下提供基於雲平臺的遠程設備的數據傳輸和監控。
apache

原理圖:
MQTT通訊協議在Unity中的應用之二—Unity3D C#實現
服務器

MQTT開發文檔:
http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html
網絡

Unity3D開發引入MQTT時候進行封裝成M2MQTT,經過GiitHub下載M2MQTT,不少,導入你的Unity工程,這裏就不介紹了。異步

第一步:由於MQTT中間須要消息代理,因此咱們首先得搭建代理服務器,我這裏使用得是apache-apollo-1.7.1服務,安裝過程百度,註冊登陸
MQTT通訊協議在Unity中的應用之二—Unity3D C#實現
須要選擇協議。
第二步:就是要在Unity進行開發了,直接上代碼吧


ide

using System.Net;
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;

 /// <summary>
    /// 鏈接
    /// </summary>
    public void  onConnect()
    {
        string txtIP = ip.text;
        string txtPort = port.text;
        string clientId = Guid.NewGuid().ToString();
        //服務器默認密碼是這個
        string username = "admin";
        string password = "password";
        client = new MqttClient(IPAddress.Parse(txtIP), int.Parse(txtPort), false, null);

        client.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;
        client.MqttMsgSubscribed += Client_MqttMsgSubscribed;
        client.Connect(clientId, username, password);
    }

          /// <summary>
      /// 斷開鏈接
      /// </summary>
      client.Disconnect();

        //訂閱主題
          if (client != null&&subscribe_chanel.text!="")
            {
                client.Subscribe(new string[] { subscribe_chanel.text }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });
            }

                        //訂閱回調
                         private void Client_MqttMsgSubscribed(object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgSubscribedEventArgs e)
    {
        Debug.Log("訂閱" + e.MessageId);
    }

                        //發佈消息
                         if (client != null && publish_chanel.text != "")
            {
                client.Publish(publish_chanel.text, System.Text.Encoding.UTF8.GetBytes(publish_content.text), MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE, false);
            }

                        //接受消息
                           private void Client_MqttMsgPublishReceived(object sender, uPLibrary.Networking.M2Mqtt.Messages.MqttMsgPublishEventArgs e)
    {
        string message=System.Text.Encoding.UTF8.GetString(e.Message);
        receive_message = message;
        Debug.Log("接收到消息是"+message);
    }

主要的方法都在上面了,並且我測試過了,信息誰能夠接受到的,若是你們還想設置更多條件,能夠在我上面發的開發文檔連接中繼續探索。測試

相關文章
相關標籤/搜索