• MQTT 折腾笔记协议简读


    MQTT 折腾笔记----协议简读

    导言

    第一次听说MQTT 这玩意是由于要找个做手机推送的方案,后来发现,JPush这家伙做的实在不错,然后就不折腾了,最近,忽然心血来潮,把MQTT 协议 看了一遍,网上的很多中文的资料都是坑爹的,全部都是说MQTT 做推送,我按图索骥全部都是转载翻译自老外2010写的这篇文章实在汗颜...后来,我改用全英文关键字,搜索总算发现了MQTT 的用处.如果,你不愿意看我的长篇大论我建议你去wiki那里看下 MQTT 详细介绍

    MQTT 解决什么事情?

    对于需要要了解一个什么玩意,我们需要这玩意,解决我们什么事情.从WIKI 来看MQTT 协议主要解决的是机器与机器之间数据通信,各位想到什么没?有接触过物联网的话,可能有所了解了,当我们所有机器都能在一个网络上面分配的一个地址的话,由于,设备间的性能差异,低到可能就是一个插座,而你需要这个插座能进行数据通信,例如,控制这个插座的开-闭这类的,就需要一个极其轻量级的协议而MQTT 协议就是为此目的诞生的.

    比较有趣的是,MQTT这个协议在1999 年就有了最新的版本是v3.1(2010/12/06),其适用于如下但不限于这几点:

    1. 即时传输的轻量级协议
    2. 专门设计用于低带宽或者高昂的网络费用
    3. 具备三种服务品质层级

    MQTT 协议简读

    MQTT 协议相对某些协议来说,实在是简短的令人发指,整个协议只用42页就说完了.

    MQTT v3 到 v3.1 有几点比较重要的变化个人感觉最重要的是从ascii 码转向 utf8的支持,不过我估计没人用过v3 所有我这里不多说了,有兴趣的,请翻阅一下协议文档.....

    传输开销的比较

    MQTT 最引以为豪的就是最小的2 byte 头部传输开销.我们看下其他流行的协议的message format的设计

    • XMPP 消息体用的是xml

      |--------------------| | <stream> | |--------------------| | <presence> | | <show/> | | </presence> | |--------------------| | <message to='foo'> | | <body/> | | </message> | |--------------------| | <iq to='bar'> | | <query/> | | </iq> | |--------------------| | ... | |--------------------| | </stream> | |--------------------|

    • HTTP

      HTTP-message = Request | Response ; HTTP/1.1 messages

    还有很多协议,就不一样细说了,就举两个我比较了解的.就目前通用的协议来看很少有比MQTT 还要低的传输开销了.如果,你有了解的希望介绍一下.

    消息体的设计简说

    bit76543210
    byte 1 Message Type DUP flag QoS level RETAIN
    byte 2 Remaining Length

    第一个byte 用于说明消息体的信息.

    第二个byte 用于传输我们需要传输的数据.

    更多详情请看协议 msg-format 部分

    接下来,结合一个最简例子来对这个消息体进行说明

    MQTT 最简例子

    为了方便进行MQTT的了解与使用,目前MQTT的资料极其匮乏,也找不到什么给力的例子所以,随着我研究的深度,来慢慢提高这些例子的难度.

    准备

    服务端:

    客户端:

    例子地址:https://github.com/youxiachai/mqttlesson/tree/master/LessonOne java 版本暂未提供,晚些时候写个android的客户端....

    例子设计

    为了简单,方便理解,这个例子:

    1. 服务器是一个广播模型
    2. 对于订阅/发布没有限制使用topic(主要是为了后面的知识做准备)
    3. 订阅者获取到一次发布者消息就断开连接

    4. 首先服务端启动,接着启动 mqttClientSub

    例子流程图: clientA ->(connect) server

    1. 启动发布者:mqttClientPub

    例子流程图: clientB ->(publish) server ->(pub) clientA 以上就是整个例子的流程


    作者:游戏阿柴 
    出处:http://www.cnblogs.com/youxilua 
    本文采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。 
    微博联系:新浪微博 
    用支付宝赞助博主:http://me.alipay.com/youxilua

     
    分类: android

    今天开始学PATTERN RECOGNITION AND MACHINE LEARNING (PRML)书,章节1.2,PROBABILITY THEORY 概率论(上)

    原创书写,转载请注明出处http://www.cnblogs.com/xbinworld/archive/2013/04/25/3041505.html 

    今天开始学Pattern Recognition and Machine Learning (PRML)书,章节1.2,Probability Theory (上)

    这一节是浓缩了整本书关于概率论的精华,突出一个不确定性(uncertainty)的理解。我看的比较慢,是想要细扣一下,而且写blog码字也很慢,不过我想留下点痕迹所以会写下去。前面几节其实很重要,所以单独一节甚至半节写一个blog,后面如果一个章节在讨论一个topic我可能就会一个章节一个blog,比如第九章讲EM算法,我应该就用一个blog带过。

    (入门而已,高手一笑而过吧~。~)

    对于书中的公式如果重要我都会推导一下,然后用黄色表示一下,以后的章节也是如此。如果大家也看PRML书建议也自己推几个公式,加深理解。如果出现“注”,就是我自己加的描述。

    首先从一个例子说起:有两个盒子,一个红色盒子里面有2个苹果(绿)+6个桔子(黄),一个蓝色盒子里面有3个苹果+1个桔子,具体可以见图1.9。随机挑选一个盒子,然后从盒子里随机拿出一个水果,观察是什么后放回原处,重复这个过程很多次。

    我们定义挑选红色盒子的次数为总次数的40%,挑选蓝色盒子的次数为60%。

    clip_image002

    在这个例子中,盒子的颜色是一个随机变量,我们称之为B,它有两个取值r(red)和b(blue);水果也是一个随机变量,称之为F,它的取值是a(apple)和o(orange)。

    首先从频次的角度理解概率,选择红/蓝盒子的概率分别为:

    clip_image004

    注:概率必须在[0,1]范围内,且覆盖所有可能的互斥事件的概率和为1。

    我们现在可以问类似这样的问题:1)一次挑选得到苹果的概率是多少?(2)如果我们得到的是桔子,那么这一次挑选的是红盒子的概率是多少?

    =============================================华丽的分割线==========================================================

    在解决上述问题前我们先跳出这个例子,来考虑更一般的情况:见图1.10

    clip_image006

    对两个随机变量的大量重复实验,把得到(xi, yi)的结果次数记录到n_ij中,图中一列之和表示为ci(表示所有出现xi的总次数),一行之和为rj,为出现yj的总次数。得到X=xi和Y=yi的联合概率

    clip_image008

    以及X=xi的边缘概率:

    clip_image010

    clip_image012

    还可以得到条件概率,给定xi得到yj的概率

    clip_image014

    通过以上推导,我们可以得到下面的关系:

    clip_image016

    上面的(1.7)式子叫做加法规则sum rule,(1.9)叫做乘法规则product rule, 是概率论中最基本的两个规则了:

    clip_image018

    注:这两个rule几乎是最重要的方法了。

    通过这两个规则可以得到在机器学习中非常重要的贝叶斯理论:

    clip_image020

    其中P(X)可以对所有的Y展开:

    clip_image022

    可以理解为normalization,使得(1.12)左边的条件概率在所有的Y取值下,概率之和为1。

    =============================================华丽的分割线============================================================

    好了,现在跳回到前面的两个盒子的例子,(在下面的书写中我们会强调一下随机变量(大写字母)以及它们的实例(小写字母),后面可能就会写的简略一些)

    clip_image024

    clip_image026

    这几个概率表达式都是直接得到的,题目中给了,比如第三条:盒子为红色情况下,抽到水果为苹果的概率为1/4。 且满足clip_image028,即同一条件下所有可能性之和为1。OK, 现在我们可以回答“抽到苹果的概率”这个问题了:

    clip_image030

    即穷举所有盒子的可能,以及每一种盒子下抽到苹果的概率之和。对应的,抽到桔子的概率就是p(F=o) = 1- 11/20 = 9/20。

    好,现在回答第二个问题:如果我们得到的是桔子,那么这一次挑选的是红盒子的概率是多少?

    通过贝叶斯公式:

    clip_image032

    答案通过贝叶斯公式很容易得到,而我们所需的信息都可以从前面的基本信息中得到。在这个例子中,我们已经设计到很多概念,比如对盒子的选取有一个预估,也就是P(B),我们称之为先验概率,因为它是在我们观测抽取结果之前就已知了的(决定了的);

    然后我们的第二个问题,已知抽到是桔子的情况下求盒子红色的概率,其实就是估计盒子为红色的后验概率,因为是在我们观察到随机变量F之后得到的估计。由此可见当我们有一定的观察值的时候我们就不能从直观的理解去判断一个事件,比如先验告诉我们说有60%的可能是选取蓝盒子,但式子是(1.23)说明在有观察o的情况下,红盒子的概率有2/3,比蓝盒子大多了。

    还要介绍一下两个随机变量的边缘分布的乘积等于他们的联合分布,即p(X,Y) = p(X)P(Y),那么这两个随机变量相互独立,也有p(Y|X) = p(Y)。

    1.2.1 概率密度

    前面介绍都是从离散变量的角度,我们需要重新考虑连续变量的概率定义。

    如果一个实数连续变量,其落在区间clip_image034的概率是clip_image036,当clip_image038时,那么小p(x)就称之为x的概率密度。概率定义成:

    clip_image040

    注:这里都用小p来表示容易混淆,前面的p是代表概率,后面p(x)是概率密度。

    (连续变量就没有x为某一具体值的概率定义了,因为有无穷的取值,都是说落在一个区段内的概率)

    累计分布函数(cumulative distribution)的定义是x处在区间clip_image042的概率:

    clip_image044

    满足P’(x) = p(x)。在图1.12中我们绘制了概率密度小p和累计分布函数大P,绿色的面积是落在小区间内的概率。

    clip_image046

    前面讨论过的sum rule 和product rule在连续变量情况下也适用:

    clip_image048

    1.2.2 期望和方差

    期望:一个函数f(x) 在一个概率分布p(x)下的平均取值就是f(x)的期望,定义为:

    clip_image050

    对于离散情况而言,期望就是一个所有可能值的加权和。对于连续变量就用对应的积分形式:

    clip_image052

    注:这里两个小p有不同,上面在离散情况下已经是理解成概率了,而下面(1.34)中小p是概率密度。

    对期望的一种直观估计是所有观察点的平均:

    clip_image054

    当N趋于无穷大时,取等号。这样的平均值我们是经常用到的。

    如果f有多个变量,我们一般会用下标来表示是针对哪一个变量的分布(变化)考虑的,比如

    clip_image056

    就是说f的关于变量x的期望,事实上,上式是一个以y为变量的函数。类似的,我们也可用定义条件期望:

    clip_image058

    方差:方差可以估计一个函数f在他的期望附近变化的剧烈程度,定义为

    clip_image060

    如果考虑变量x本身,也可用x的方差:

    clip_image062

    注:(书里跳过了)这个等式实际上是从方差的定义推导出来的:

    clip_image002

    另外,对于两个随机变量我们定义协方差:

    clip_image066

    表示x,y一起变化的程度,如果x和y相互独立,那么协方差为0。可以看到单个变量的方差是协方差的特殊情况,x=y

    如果x和y表示的是两个向量(vector)变量,x和y是列向量,那么协方差是一个矩阵:

    clip_image068

    好了,期望和方差介绍到这里,这两个概念几乎贯穿机器学习的所有领域。今天先记录这一些吧,章节1.2确实很重要,这里只是上半部分,下半部分过几天整理了再放出吧。

    吐槽一下,写了这么几页就花了2小时+(动作太慢?),主要是语句都是经过梳理的,虽然公式和图表都是copy的,但是依然要花不少时间,记下来我自己加深下印象也是有好处。

    1.2的下半部分包括了贝叶斯定理和高斯分布的介绍,非常重要。基本上章节1.2组成了概率统计学习的基础内容,建议初学者好好理解下。

     
     
  • 相关阅读:
    物料主档的屏幕增强
    删除请求号(网上转载)
    Echarts X轴内容过长自动隐藏,鼠标移动上去显示全部名称方法
    mscms学习
    java 基础(泛型)
    java 基础(枚举类)
    java 基础(抽象类)
    java 基础(单例)
    android项目杂记
    Android Studio--学习系列(3)发版
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3041785.html
Copyright © 2020-2023  润新知