发布开源MQTT网关服务

        想一想都快两年没有编写代码,这公众号也快有两年没更新了0f854b274c6c19f1001a20d77c6a607b.png,人闲久了总想找些活干,为了保持代码编写技能于是把之前写的MQTT协议扩展出一个网关服务,并实现对3.X和5.0协议版本的支持。作为一个服务网关在性能上也是有着一定的要求,其实现目标能支持数十万的消息订阅转发。

简介
        项目是基于BeetleX通讯组件扩展的MQTT协议通讯服务,服务包括两大模块分别是:BeetleX.MQTT.Protocols和BeetleX.MQTT.Server。前者是对MQTT通讯协议的实现,分别实现了V3.X和V5.0两个版本;而后者则是网关服务的实现并集成了基础的管理界面,两个项目都是都提供了完整的实现代码并存放在Gitub上。

项目开源地址:github.com/beetlex-io/mqtt

运行项目
        项目的运行非常简单,只需要创建一个控制台项目并在Main方法中添加以下代码即可以运行

class Program
{
    private static MQTTServer mServer;
        
    static void Main(string[] args)
    {
        mServer = new MQTTServer(ProtocolType.V3);
        mServer.RegisterComponent<BeetleX.MQTT.Server.Controller>();
        mServer.MQTTListen(o =>
        {
            o.DefaultListen.Port = 8089;
            //o.DefaultListen.SSL = true;
            //o.DefaultListen.CertificateFile = "";
            //o.DefaultListen.CertificatePassword = "";
        })
        .Setting(o =>
        {
            o.LogToConsole = true;
            o.Port = 80;
            o.LogLevel = EventArgs.LogType.Info;
        })
        .UseJWT()
        .UseEFCore<Storages.MQTTDB>()
        .UseElement(PageStyle.ElementDashboard)
        .Initialize((http, vue, resoure) =>
        {
            resoure.AddAssemblies(typeof(BeetleX.MQTT.Server.MQTTUser).Assembly);
            resoure.AddCss("website.css");
            resoure.AddScript("echarts.js");
            vue.Debug();
        })
        .Run();


    }
}

以上代码在80端口上打开WEB管理服务,在8089端口上打开MQTT服务;服务启动后就可以通过浏览器进入到简单的管理界面。在协议版本选择上可以在MQTTServer创建时指定V3或V5(暂时不能同一端口服务同时支持V3和V5)。

  • 首页

    9b1ffbfcfcef0f5856e7f93d261677ab.png

  • 用户管理

    48b4d4b24d5ee1e9b1dead1226fc10c5.png

  • 设备管理

    4c719cd06a653dda42375c3a6fcd3501.png

管理界面只推荐简单的帐号管理和转发统计,基础框架已经搭建完成,可以根据实际需求进行扩展开发。

单独使用协议分析器
        如果使用其他网络服务组件又不想自己编写MQTT协议,那可以单独使用BeetleX.MQTT.Protocols对网络数据进行协议分析。组件是基于Stream数据流规范开发,只需要传对一个标准的Stream数据流即可以完成MQTT协议读取和写入。

//v5
var mqttparse = new BeetleX.MQTT.Protocols.V5.MQTTParseV5();
mqttparse.Read(stream, null);
mqttparse.Write(msg, stream, null);
//v3.x
var mqttparse = new BeetleX.MQTT.MQTTParseV3();
mqttparse.Read(stream, null);
mqttparse.Write(msg, stream, null);

性能:由于MQTT是支持通配符订阅的,高并发时大量消息在订阅匹配上往往会比较损耗性能;组件在这方面做了特别的优化,对于通配符订阅上也能非常轻松地应对每秒上10万订阅转发(具体上限取决于硬件搭配)。

提醒:由于项目仅个人兴趣编写,并没有在自有商业项目中使用,因此会存在一定的问题;如果碰到问题可以去Github对应的项目上提出相应的问题。

BeetleX

开源跨平台通讯框架(支持TLS)

提供HTTP,Websocket,MQTT,Redis,RPC和服务网关开源组件

04e5302f6f4bfd8fcb626f6cec0f8aa2.jpeg

http://beetlex-io.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值