三不朽

基于MQTT协议的物联网设备平台设计总结

Publish: September 3, 2020 Category: 编程 No Comments

IoT(Internet of Things),是当下出现频率非常高的一个词汇,无论是可穿戴设备、工业设备、商用设备通过连接互联网,实现彼此协作以及和后端服务协同交互,极大提高了设备灵活性,高可用性。
互联网的基础协议是TCP/IP。而MQTT是基于TCP/IP协议栈构建,相比其他协议更为简单,而且生态系统丰富,受到广大开发者的青睐。相比传统的HTTP协议,MQTT协议有如下优势:

  • 协议轻量级,带宽占用小
  • 通过业务层设计能实现全双工通信
  • 实时通信
  • 灵活的订阅发布模式
  • 协议简单

MQTT协议简介

MQTT 最初由 IBM 于上世纪 90
年代晚期发明和开发。它最初的用途是将石油管道上的传感器与卫星相链接。顾名思义,它是一种支持在各方之间异步通信的消息协议。异步消息协议在空间和时间上将消息发送者与接收者分离,因此可以在不可靠的网络环境中进行扩展。虽然叫做消息队列遥测传输,但它与消息队列毫无关系,而是使用了一个发布和订阅的模型。在
2014 年末,它正式成为了一种 OASIS 开放标准,而且在一些流行的编程语言中受到支持(通过使用多种开源实现)。

模型简介:

1599093713(1).png

在整个MQTT协议中有三个角色,分别是:发布者(Publisher)、代理(Broker)、订阅者(Subscriber)。如果以C-S架构来看发布者和订阅者都是客户端,代理是服务器,发布者和订阅者是独立的也是相对的。

完整流程

启动Broker,订阅者向服Broker订阅相关主题,发布者向Broker代理发布主题信息,订阅和发布没有前后顺序依赖,Broker代理向所有订阅该主题的订阅者推送消息。




阅读剩余部分...

在Laravel中使用laravel-mysql-spatial处理geometry空间类型数据

Publish: July 13, 2020 Category: 编程 No Comments

接之前一篇文章,我们使用mysql来处理geometry相关数据。用到了laravel-mysql-spatial来处理geometry数据。今天正好有时间整理了laravel-mysql-spatial完整的使用方法。机器翻译为主哈,使用通俗易懂的文字加以描述。原文在这里 https://github.com/grimzy/laravel-mysql-spatial

开始之前必须要了解的概念: SRID (空间引用识别号, 坐标系)
地球并不是平的,也不是正圆形,而是一个非标准的椭圆,在不同的经纬度位置,计算两点的距离没有一个完美的公式(即快速、有准确)。
所以坐标系应运而生,SRID是指数据的坐标系,例如: 在PostGIS中可以查到支持的SRID。查询与北京、中国有关的坐标系。
postgres=# select from spatial_ref_sys where srtext ~ 'beijing';
postgres=# select from spatial_ref_sys where srtext ~ 'china';

数据可以在不同的坐标系之间转换,在进行GIS计算时,一定要在同一个坐标系中进行。

Laravel 包可轻松使用MySQL 空间数据类型和 MySQL 空间函数。
请检查 MySQL 版本的文档。MySQL 的空间数据扩展在 MySQL 5.5 中添加,但许多空间函数在 5.6 和 5.7 中已更改。
版本

  • 1.x.x: MySQL 5.6 (也支持 MySQL 5.5, 但不是所有空间分析函数)
  • 2.x.x: MySQL 5.7
  • 3.x.x: MySQL 8.0,支持 SRID(当前分支)
    此包还适用于 MariaDB。有关兼容性,请参阅 MySQL/MariaDB空间支持矩阵。







阅读剩余部分...

WEB页面JSON格式化显示和应用小技巧

Publish: July 4, 2020 Category: 小技巧 No Comments

如果使用JSON作为参数,JSON格式化显示在调试和简单配置系统中会经常用到。这里以PHP和JS为例子讲解如何更友好的显示JSON数据。

一 使用PHP来处理格式化显示JSON和使用JS来处理格式化显示JSON
先看下效果图:

上面这种效果是在html元素<pre>标签中显示的效果。通常我们拿到的数据是这种格式

{"username":"myname","password":"xsdasi349r034rdfasdfsaasdfasdfa","gender":"male","age":"12"}

如果有经过转义会是下面这种方式

{"username":"myname","password":"xsdasi349r034rdfasdfsaasdfasdfa","gender":"male","age":"12"}








阅读剩余部分...

Redis状态查看性能分析总结

Publish: July 4, 2020 Category: 运维 No Comments

作为一个广泛使用的缓存、消息队列、简单算法支撑基础组件,redis每一次大版本更新都会给我们带来惊喜。在写本文章的时候redis已经发布了6.0.5稳定版。后续会陆续分享一些使用redis实现各种算法的场景,本文主要讲述redis运维性能分析方面的实战总结。

一 查看redis运行状态

从如下几个方面来查看,info 命令有三种使用方式分别如下:

info 部分redis统计信息


info all 全部redis统计信息


info section 某一块的统计信息,其中section可以忽略大小写,例如: redis-cli info memory

通常情况下都是对某个块感兴趣,然后会对该块执行info 操作。










阅读剩余部分...

Android自学避坑笔记之发起一个完整http请求

Publish: June 29, 2020 Category: 编程 No Comments

新建一个项目,遇到如下问题

using legacy android.support libraries

看字面意思是是否启用旧的支持库,我选择不勾选。

在真机调试时候选择activity,然后提示如下错误:

The activity must be exported or contain an intent-filter

安卓中作为启动页的activity在mainfest中必须必须设置intent-filter或者设置成exported
在activity设置如下

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>








阅读剩余部分...