MQTT 5.0到期消息Message Expiry

Publish: October 16, 2020 Category: 编程 No Comments

MQTT 5.0规范中有一个整洁的小功能,称为消息过期(或消息过期间隔)。

互联网上已经对此进行了多次解释。它允许发布者在其发送的任何消息中添加有效期限。有时候,我们对功能有误解。误解是MQTT 3.1.1协议缺少Message Expiry,而现在它已存在于5.0中,它将取代并替换保留的消息和其他持久会话功能。好吧,没那么快。

您很可能会从传统企业消息传递系统中了解消息过期(或TTL,生存时间)。规范的示例在这里:消息过期模式。

传统消息过期模式与MQTT

此模式的应用程序主要是这样的:

  • 首先,您希望使用者在特定时间范围内处理作业(应用程序消息)。
  • 其次,您希望将应用程序消息转发到dead lettering队列,以防使用者无法及时处理它。从dead lettering队列中,您的后端系统可以处理该消息并重新触发作业或任何其他需要的操作。
    现在,MQTT没有队列概念,当然也没有dead lettering队列概念!因此,我们从一开始就面临着截然不同的情况。您不能只配置dead lettering队列(或dead lettering主题)。顺便说一下,这也是原因,MQTT与其他系统一样,除了消息TTL之外没有“队列TTL”。 (请注意,它具有Session Expiry,这又是完全不同的东西)。

阅读剩余部分...

MQTT v3.1.1中用户名、密码、客户端ID的最大长度

Publish: October 16, 2020 Category: 编程 No Comments

在连接包中

MQTT CONNECT控制数据包始终包含有效负载。它是建立连接后客户端必须发送给服务器的第一个数据包。
它只能由客户端发送一次,如果发送了第二个连接包,服务器(代理)必须将其作为协议冲突处理并断开客户端连接。
有效载荷可能包含几个不同的字段:

唯一客户端标识符(clientid)–始终存在

  • topic
  • message
  • 用户名
  • 密码(也需要用户名!)

clientid是必需的,其他字段是可选的。可选字段的存在由标头中的标志确定。

限制

以下是合规broker应支持的限额:

clientid:23个UTF-8编码字节

用户名编码后最大655535字节(UTF-8编码)

密码:0到65535字节的二进制数据

消息限制大小:268435455字节

满足MQTT v3.1.1规范的任何代理都需要支持客户机id的以下字符:

0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

broker可以选择支持其他字符和更长的客户机ID。

23个字就够了。记住,这些不是位,而是字符。例如,如果使用base58编码,则得到58^23个组合~3,62E+40~ 362112794667800000000000000000000000000个组合。如果你没有,那就更糟了。

broker可以选择支持长度为零字节的clientid。在这种情况下,代理必须为客户机分配一个唯一的clientid。并非所broker都支持这一点(根据规范“可选”)。

用户名必须是UTF-8编码字符串。密码可以是二进制数据。
消息也可以是二进制数据。




阅读剩余部分...

如何使用MySQL查找多边形地理围栏中包含的点

Publish: October 15, 2020 Category: 编程 No Comments

与其他数据库(如Postgres)相比,MySQL在地理空间方面的应用有点晚,但随着5.6和5.7版本的发布,许多新的GIS功能最终得以实现。例如,在5.7中,我们得到了:

  • ST_Distance_Sphere可计算球体上两点之间的距离。
  • InnoDB空间索引
  • GeoJSON集成,引用RFC的话,“一种基于JSON的地理空间数据交换格式。”

有很多有趣的事情我们现在可以完成使用这些新的情势。今天我将展示一个非常简单的例子,说明如何使用多边形和点进行搜索。这里的目标是回答“这一点在这个城市吗?”?”.

定义点

首先,让我们创建一个带有名称和一组坐标的“places”表。但是,我将使用一个点,而不是将纬度和经度存储为两个不同的浮动。

CREATE TABLE `places` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(256) DEFAULT NULL,
  `coordinates` point DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

阅读剩余部分...

一种简单的基于多边形方法的地理围栏c#语言描述

Publish: October 15, 2020 Category: 编程 No Comments

介绍

使用GPS跟踪设备的GPS跟踪软件的一个重要功能是地理围栏及其帮助跟踪资产的能力。地理围栏允许GPS跟踪解决方案的用户在工作场所、客户场所和安全区域周围绘制区域(即地理围栏)。当这些地理围栏被配备GPS的车辆或人员越过时,可以通过短信或电子邮件向用户或运营商发出警告。

关怀区域异常回报

地理围栏是地理区域上使用基于位置的服务的虚拟周界,因此当地理围栏设备进入或退出该区域时,将生成通知。通知可以包含有关设备位置的信息,并且可以发送到移动电话或电子邮件帐户。参考文献:http://en.wikipedia.org/wiki/geofance

背景

对于地理围栏,我使用了多边形地理围栏方法,即在路线或区域周围绘制多边形。使用这种方法,GPS跟踪设备可以在多边形内部或外部进行跟踪。

阅读剩余部分...

freeswitch中使用webapi操作控制

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

FreeSwitch支持多种方式的控制配置,使用webapi方式相对其他方式命令简单,比较直观。期认证方式为HTTP Basic认证方式,也就是在发送控制命令的时候携带用户名密码即可。

如果开启了mod_curl模块,在浏览器中访问 http://your-host:8080/webapi/help 会看到如下所有命令。

.    Shutdown  mod_commands
acl  <ip> <list_name>  Compare an ip to an acl list  mod_commands
alias  [add|stickyadd] <alias> <command> | del [<alias>|*]  Alias  mod_commands
amr_debug  <on|off>  Set AMR Debug  mod_amr
av  debug [on|off] | show <formats | codecs>  AV general commands  mod_av
banner    Return the system banner  mod_commands
bg_system  <command>  Execute a system command in the background  mod_commands
bgapi  <command>[ <arg>]  Execute an api command in a thread  mod_commands
break  <uuid> [all]  uuid_break  mod_commands
cdr_csv  parameters  cdr_csv controls  mod_cdr_csv
chat  <proto>|<from>|<to>|<message>|[<content-type>]  chat  mod_dptools
coalesce  [^^<delim>]<value1>,<value2>,...    

以上只列举了一部分。

阅读剩余部分...