linux局域网聊天软件_mqtt传输大量数据「建议收藏」

linux局域网聊天软件_mqtt传输大量数据「建议收藏」  MQTT是机器对机器(M2M)/物联网(IoT)连接协议

linux局域网聊天软件_mqtt传输大量数据「建议收藏」"

   MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器到机器”(M2M)或物联网(IoT)世界的连接设备,以及带宽和电池功率非常高的移动应用的理想选择。例如,它已被用于通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器

特点

  • 开放消息协议,简单易实现
  • 发布订阅模式,一对多消息发布
  • 基于TCP/IP网络连接,提供有序,无损,双向连接。
  • 1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
  • 消息QoS支持,可靠传输保证

应用

MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

  • 物联网M2M通信,物联网大数据采集
  • Android消息推送,WEB消息推送
  • 移动即时消息,例如Facebook Messenger
  • 智能硬件、智能家具、智能电器
  • 车联网通信,电动车站桩采集
  • 智慧城市、远程医疗、远程教育
  • 电力、石油与能源等行业市场

C#程序实现

MQTnet库

MQTTnet 是一个用于基于 MQTT 的通信的高性能 .NET 库。它提供 MQTT 客户机和 MQTT 服务器(代理),并支持版本 5 之前的 MQTT 协议。

常规

  • 异步支持
  • 客户端和服务器(但不是 UWP 服务器)的 TLS 支持
  • 可扩展的通信通道(例如内存中、TCP、TCP+TLS、WS)
  • 轻量级(只有MQTT的低级实现,没有开销)
  • 性能优化(每秒处理约 150,000 条消息)*
  • 跨所有受支持的 MQTT 协议版本的统一 API
  • 访问内部跟踪消息
  • 单元测试(约 636 次测试)
  • 无外部依赖关系
    在本地机器(英特尔 i7 8700K)上测试,MQTTnet 客户端和服务器使用 TCP 通道在同一进程中运行。用于验证的应用程序是此存储库的一部分,并存储在/Tests/MQTTnet.TestApp.NetCore中。

客户

  • 支持通过 TCP (+TLS) 或 WS (WebSocket) 进行通信
  • 包含内核低级别MqttClient,具有低级别功能
  • 还包括 ManagedMqttClient,它会自动维护连接和订阅。此外,应用程序消息会自动排队并重新安排为更高的 QoS 级别。
  • Rx 支持(通过另一个项目)
  • 与 Microsoft Azure IoT Hub 兼容

服务器(代理)

  • 可用连接的客户端列表
  • 支持同时使用不同协议版本的连接客户端
  • 能够发布自己的消息(无需环回客户端)
  • 能够接收每条消息(无需环回客户端)
  • 可扩展的客户端凭据验证
  • 支持保留的消息,包括通过接口方法持久保存(需要自己的实现)
  • 支持 WebSockets(通过 ASP.NET Core 2.0,单独的 nuget)
  • 可以添加自定义消息拦截器,允许转换或扩展每个收到的应用程序消息
  • 验证订阅并拒绝订阅某些主题,具体取决于请求客户端
  • 同时连接具有不同协议版本的客户端。

支持的框架

框架 版本
.NET 5.0+
.NET Framework 4.5.2+
.NET 标准 1.3+
.NET Core 1.1+
.NET Core App 1.1+
5.2+
断续器 10.0.10240+
Xamarin.Android 7.5+
Xamarin.iOS 10.14+
Blazor WebAssembly 3.2.0+

服务端代码实现

 public static async void MqttServer()
        {
            var optionBuilder = new MqttServerOptionsBuilder()
                .WithDefaultEndpointBoundIPAddress(IPAddress.Parse("192.168.0.2"))
                .WithDefaultEndpointPort(1883)
                .WithConnectionBacklog(1000)
                .WithConnectionValidator(c =>
                {
                    if (c.ClientId.Length < 10)
                    {
                        c.ReasonCode = MqttConnectReasonCode.ClientIdentifierNotValid;
                        return;
                    }

                    if (c.Username != "admin") //用户名
                    {
                        c.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
                        return;
                    }

                    if (c.Password != "public") //密码
                    {

                        c.ReasonCode = MqttConnectReasonCode.BadUserNameOrPassword;
                        return;
                    }

                    Console.WriteLine($"{c.ClientId}连接成功!");
                    c.ReasonCode = MqttConnectReasonCode.Success;
                }).Build();
            _mqttServer = new MqttFactory().CreateMqttServer();

            //客户端接入
            _mqttServer.UseClientConnectedHandler(ClientConnected);

            //客户端断开
            _mqttServer.UseClientDisconnectedHandler(ClientDisconnected);

            //主题消息
            _mqttServer.UseApplicationMessageReceivedHandler(ApplicationMessageReceived);

            //主题订阅需要实现IMqttServerClientSubscribedTopicHandler
            _mqttServer.ClientSubscribedTopicHandler =new ClientSubscribedTopic();

            //启动监听需要实现IMqttServerStartedHandler
            _mqttServer.StartedHandler = new ServerStarteOrStopped();
            //停止监听 IMqttServerStoppedHandler
            _mqttServer.StoppedHandler = new ServerStarteOrStopped();
            //服务启动
            await _mqttServer.StartAsync(optionBuilder);
        }

客户端代码实现

public static async  void Client()
        {
            var options = new MqttClientOptions();

            options.ClientId = Guid.NewGuid().ToString().Replace("-", "").ToUpper();

            //设置服务器地址与端口
            options.ChannelOptions = new MqttClientTcpOptions()
            {

                Server = "192.168.0.2",
                Port = 1883
            };
            //设置账号与密码
            options.Credentials = new MqttClientCredentials()
            {
                Username = "admin",
                Password = Encoding.Default.GetBytes("public")
            };
            options.CleanSession = true;

            //保持期
            options.KeepAlivePeriod = TimeSpan.FromSeconds(100.5);

            //构建客户端对象
            _mqttClient = new MqttFactory().CreateMqttClient() as MqttClient;

            try
            {
                //绑定消息接收方法
                _mqttClient.UseApplicationMessageReceivedHandler(ApplicationMessageReceivedHandler);

                //绑定连接成功状态接收方法
                _mqttClient.UseConnectedHandler(ConnectedHandler);

                //绑定连接断开状态接收方法
                _mqttClient.UseDisconnectedHandler(DisconnectedHandler);

                //启动连接
                await _mqttClient.ConnectAsync(options);

                //订阅消息
                await _mqttClient.SubscribeAsync(
                    new MqttTopicFilter[] { //订阅消息集合
                        new MqttTopicFilter() //订阅消息对象
                        { 
                            Topic = "123",  //订阅消息主题
                            QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce  //消息类型
                        }
                    });
            }
            catch
            {
                Console.WriteLine($"连接失败");
            }
        }

Demo下载地址:https://download.csdn.net/download/herees/85160530

今天的文章linux局域网聊天软件_mqtt传输大量数据「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/77550.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注