• 基于mqtt的消息推送(一)技术选型


    背景

    项目架构原来是App通过soap传输数据,由于部分数据是动态变化的,所以需要定时轮询是否有新的数据。由于更新的数据本身大小不是很大,考虑使用消息推送的方式来更新数据。

    技术选型

    mq可以供选择的方案很多,选型的标准为可以在移动端快速使用,跨平台(App现在有Android和IOS两个版本),可以在复杂网络环境使用。mqtt完全满足上面的需求,首先mqtt是由IBM牵头制定,设计目标是帮助嵌入式设备快速稳定的进行数据传输,协议本身是开源的,基于tcp协议构建。并且有大量的开源服务端和客户端实现,现在的mqtt属于eclipse基金会。在mqtt的github页面有相关的实现连接,链接: https://github.com/mqtt/mqtt.github.io/wiki/software?id=software

    服务端选型

    服务端可供选择的实现:https://github.com/mqtt/mqtt.github.io/wiki/servers

    简单说一下各个实现的优势和劣势(只说明了试用过的,其它的请自行测试):

    1.WebsphereMQ

    mqtt协议本身是由IBM提出的,不过WebsphereMQ对于一般用户来说体量太大了,上手难度太大

    2.Mosquitto

    官方网站:http://mosquitto.org/ 支持的协议类型MQTT v3.1/v3.1.1。Mosquitto本身在BSD协议下开源,可以在官网下载源代码,方便自己定制,不过Mosquitto由c实现,上手难度比较大。另外Mosquitto提供了libmosquitto供客户端使用。

    3.Eclipse Paho

    官方网站:http://www.eclipse.org/paho/,归属于eclipse基金会,提供了一个公开的mosquitto实现,地址:iot.eclipse.org, 端口 1883。主要提供了大量的客户端实现类库(本项目Andoird客户端使用了https://www.eclipse.org/paho/clients/android/

    4.emqtt

    官方网站:http://emqtt.cn/,国内大神开发的服务端,非常强悍。基于erlang开发,本身在MIT协议下开源,项目托管在https://github.com/emqtt/emqttd,协议支持到MQTT V3.1.1,支持基于HTTP Publish API and WebSocket的访问,支持集群部署,支持插件式开发。截取作者性能测试说明如下:
    性能测试

    性能测试


    erlang对于普通用户来说还是难上手,如果没有定制开发的需求可以考虑使用。另外作者提供了客户端类库,包括用swift构建的IOS客户端。

    5.Yunba.io

    官方网站:http://yunba.io/,原极光推送的CTO张虎创建的商用平台,erlang开发,支持HTTP Publish API and WebSocket,使用了下,效果还不错,IOS的sdk对接非常简单,另外提供了各个平台的sdk,大部分是基于现有的开源类库实现的。免费用户有一定的限制,如果需要商业支持是个不错的选择。

    6.Mosca

    基于node.js开发的服务端实现,项目托管在https://github.com/mcollina/mosca,同时支持WebSocket访问,本身在MIT协议下开源。数据持久化支持redis和mongo,部署支持docker。二次开发非常简单,这也是最后项目选定的一个主要因素。另附某博客的对mosca说明的技术文章http://blog.shiqichan.com/introducing-mqtt/,我在开发过程中多有参考,在此表示感谢。

    写在最后

    其实技术选型很重要的一个原则是要选择适合自己的方案,而不是最好的方案。下篇文章会介绍在使用Mosca进行二次开发遇到的那些坑,敬请期待!


    转载:http://targe.me/2016/01/02/mqtt-three/

  • 相关阅读:
    异步请求 ajax的使用详解
    关于JAVA-JS-JSP之间传值的各种方法
    C# 对List<T>取交集、连集及差集
    MVC解决方案发布IIS 登录页面需要输入两次帐号问题
    sqlserver查看被锁表、解锁
    C#中using关键字的作用及用法
    Bootstrap组件On和Off语法
    HtmlString类创建HTML Hepler 扩展MVC TextBox组件
    Js运算符优先级
    ajax调用webservice(二) 跨域。
  • 原文地址:https://www.cnblogs.com/youyong/p/11388327.html
Copyright © 2020-2023  润新知