MQTT通信协议在Unity中的应用之二—Unity3D C#实现
上一篇讲解了MQTT协议在JS实现,通过和Unity3D交互实现通信,因为对JS不是特别精通,所以讲得比较粗略。这一篇中,介绍Unity3D 实现MQTT协议通信,将细致讲解过程
MQTT是IBM开源的一个通讯方式,是一个基于TCP的发布订阅协议,MQTT使用类似MQ常用的发布/订阅模式,起到应用程序解耦,异步消息,削峰填谷的作用。
优点:
MQTT是IBM开源的一个通讯方式,是一个基于TCP的发布订阅协议,MQTT使用类似MQ常用的发布/订阅模式,起到应用程序解耦,异步消息,削峰填谷的作用。
优点:
- 使用发布/订阅模式,提供一对多的消息发布,使消息发送者和接收者在时间和空间上解耦。
- 二进制协议, 网络传输开销非常小(固定头部是2字节)。
- 灵活的Topic订阅、 Qos、临终遗言等特性。
缺点: - 集中化部署,服务端压力大,需要考虑流程控制及高可用。
- 对于请求/响应模式的支持需要在应用层根据消息ID做发布主题和订阅主题。
适用范围:
在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。
原理图:
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服务,安装过程百度,注册登录
需要选择协议。
第二步:就是要在Unity进行开发了,直接上代码吧
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); }
主要的方法都在上面了,而且我测试过了,信息谁可以接受到的,如果大家还想设置更多条件,可以在我上面发的开发文档链接中继续探索。
相关推荐
Charlesbases 2020-04-16
ITfooter 2020-01-04
georgeandgeorge 2019-12-16
j0lin 2012-09-19
FENSIJUN 2013-02-19
殊途同归 2019-06-27
jannal 2019-06-27
HotWill 2019-06-04
ljcsdn 2018-09-14
舍我其谁 2016-07-15
fankys 2019-04-11
mayflowers 2016-12-29
80204058 2017-08-17
无能力者只知抱怨 2014-01-04
一条鱼一条鱼 2008-08-03
满城风絮 2013-04-23
youbangxingye 2010-07-28
surpassli 2012-02-19