tomcat7 https 拒绝连接_物与网怎么连接呢?物联网架构及五大通信协议

消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网。柳猫将阐述移动互联网消息推送技术在物联网中的应用和演进。

一、物联网架构和关键技术

从开发的角度,无线接入是物联网设备端的核心技术,身份设备管理和消息推送技术是物联网云端的核心技术。而从场景体验的角度,除了前者,还要包括手机的前端开发技术。

daa0e89a07a90fcaf8cbc7bd6b7f3799.png

IP互联架构已是物联网的事实标准(有关物联网TCP/IP层关键技术将另文阐述,敬请关注)。本文所讲的消息推送技术是基于TCP/IP协议的应用层协议技术。

我们先进一步抽象基于IP架构的物联网组成,如下图(忽略internet和路由等基础技术):

d2dcbaa0255979e4ae0d027b3d5c149f.png

可见,核心组成就是物联设备、网关和云端。物联设备分为两类,一类是其自身天然支持TCP/IP而能直接接入物联网,如wifi、GPRS/3G/4G(当然,还有即将到来的5G)等设备;另一类是其未能支持IP协议而需要网关(协议转换)来接入物联网,如Zigbee、蓝牙等设备。对于蓝牙设备而言,手机其实是一个网关。

手机通过自身的蓝牙跟外设蓝牙设备通信,并将消息通过手机的wifi或者3G/4G模块与云服务端通信。

9391616df2b264160e700219830bde97.png
  • 从场景的角度来分析,物联网最终是给人类服务的,而手机是人类体验的最直接入口。因此在上图中可以单独添加手机组成部分,并将其与一般意义上的网关区分出来。这样物联网核心组成就是:设备端—网关—云端—手机。
  • 从应用层开发技术的角度来看,物联网应用是基于TCP/IP架构建立,在屏蔽底层的网关协议转换的基础上,物联网应用的组成部分就是:设备端—云端—手机。

OK,有了以上的介绍,我们就从物联网应用的角度来分析设备、云端、手机直接的消息推送技术,它包括云端和设备端的双向通信技术、手机和云端的双向通信技术。

二、移动互联网通信模式

互联网有B/S和C/S两种通信模式。在移动互联网领域,APP是以C/S的方式以client的角色跟服务器server进行通信;而微信是一个超级APP,其是通过内置浏览器让用户进行H5编程以获得操控硬件设备的能力,因此微信硬件平台的通信模块是B/S模式。

移动互联网B/S技术跟传统互联网没有区别,微信内置浏览器支持H5,因此可以获得很好的平台扩展性。我们近期重点关注基于微信硬件平台的物联网,因此就围绕B/S模式的消息推送技术讲述其演进。

HTTP协议是B/S的基础,HTTP有GET和POST两种方式。

888ab9c63d612e5a2755fd89d96d9692.png

三、消息推送技术演进

1.HTTP单向通信

浏览器使用HTML文本标记语言,即浏览器通过HTTP协议向服务器发起请求(请求内容包括URL,即我们常说的网址),服务器将URL对应的HTML内容通过HTTP协议作为响应传送回给浏览器。

  • 1)手机端:微信端因为有内置浏览器,其天然支持前端页面。
  • 2) 云端对手机端推送:云端使用JSP/PHP等技术开发设计前端网页和简单的逻辑即可。
  • 3)设备端:设备端上线时或者访问服务端参数等内容时需要模拟HTTP协议(C语言)向服务器发起请求,而请求的格式一般不使用HTML,而是使用较为简单的XML或者JSON协议格式。
  • 4)云端对设备端推送:云端使用HttpServlet(即使用http协议的servlet)对设备的HTTP请求进行响应,回复XML或者JSON格式的消息。
  • 5)缺点:这种方式通信方式的特点就是一请求一响应,总是要客户端向服务器发出请求,服务器才给予响应。服务器从来都不会主动给客户端发消息,而且在客户端发出请求后,服务器也只是回复一次。这种HTTP单向通信方式在互联网领域发挥巨大的作用,就是服务器端可以是无状态的,极大地简化了服务器的服务流程,提高效率。但在物联网领域,我们要求的是双向的通信能力。服务端要能主动给设备端或者手机发出消息。
72e6518a5b58b9671994f19d5a88babe.png

在这种模式下,我们怎么做双向通信呢?唯一的做法就是客户端不断地发出请求(或者周期性),服务器不断地给予回复。这种模式下的缺点显而易见:

  • 一是网络负载重,服务器每次响应后都会关闭连接,所以每次通信都得重新握手。HTTP协议的头内容的长度可不小。
  • 二是实时性差。一般设备端都是周期性地轮询服务器是否有新的消息,轮询的方式是不能获得好的实时性的。
  • 三、浏览器端每次发出请求是以HTML全部内容来响应的,消息长度过大,在这种情况下,会发现浏览器页面不断地刷新。

2.Ajax轮询

Ajax技术是浏览器支持的一种JavaScript技术。其能够局部改善用户体验技术,让用户在不察觉浏览器页面刷新的情况向服务器发出请求,并获得响应。其原理是:

  • 1)微信浏览器发出URL页面请求,服务器响应HTML页面内容。
  • 2)HTML页面使用js调用XMLHttpRequest来向服务器发出异步通信请求。
  • 3)服务器响应XML格式数据给浏览器页面。
  • 4)HTML页面使用DOM模型来动态刷新页面元素。
f21b48334527444db76d879b998dfe05.png

Ajax技术是微信硬件平台框架中推荐的页面交互技术,但其本质还是遵守HTTP单向通信的规则,只是页面交互时不需要刷新整个页面。其双向通信实时性问题依然未能解决。

3.Websocket

Websocket是HTML5支持的一种新的协议,它能够真正支持浏览器和服务器之间进行双向通信。Tomcat7及以上版本也已经支持Websocket API。

  • 1)为了能够兼容浏览器HTTP协议,Websocket规定在第一次发起请求时依然要发出符合HTTP协议规范的Header,但其Connection域的值是Upgrade,并增加Upgrade域,值是socket,即告知服务器,即将建立的通信是Websocket双向通信。服务器如果接受,会返回101给客户端进行协议切换。
  • 2)接下来的通信将不再以HTTP作为传输协议,而是使用Websocket规定的数据格式进行通信,其分为控制帧和数据帧。控制帧是发出心跳帧(ping),而服务器响应pong,还有结束帧;数据帧就是真实数据格式,其格式头只有6个字节(2个字节头和4个字节的掩码),后面就是真实的数据(经过掩码转换)。比HTTP格式头的长度要小多了。
  • 3)客户端和服务器之间是一直保持连接,直到close,当前期间要发发2个字节的3字节的ping帧。

可见Websocket比ajax有了极大的改进。其不仅省掉经常要连接握手,还简化的协议的格式,最重要的是实时性得到保证,因为双方是真正的全双工通信。

217ce4f2319b4ab176c38f733a4f1670.png

微信浏览器客户端支持Websocket,服务器使用Tomcat7以上的WebsocketServlet类,设备端要根据Websocket协议用C语言来模拟通信。

我们在用设备端模拟Websocket通信协议时一般会先看协议,再用HttpWatch等工具来抓包,抓到的头是GET ws://ip:port/path,如果在C语言也是这样模拟发包则会报400 bad request。因为C语言利用socket建立通信时已经利用了IP和port了,其发的第一个包的头是GET/path即可,不能在其前面加上ws://ip:port/。

4.MQTT

以上的分析都是将移动互联网的技术运用到物联网,其都有一个特定就是建立连接时会传送URL地址,由两个角色是客户端和服务器,这种架构我们一般称为是RESTful架构(另外,还有SOAP 面向应用的web services架构)。

RESTful架构在互联网得到越来越广泛的运用,但物联网除了互联之外,还有其独有的特征,就是其终端设备的资源有限、低功耗运用场景、网络连接环境差(时不时断开连接)等。用C语言模拟的方式来使用RESTful架构(如Websocket)会使得终端的负荷较重,而且服务器发给终端设备的消息有可能因为断开连接而收不到。

ea639df158dd9e264c674266f0e038ea.png

MQTT是IBM针对物联网退出的一种轻量级协议,建立于TCP/IP层协议之上。其是物联网的重要组成部分,可能会成为物联网的事实标准。其具有QoS,能够缓冲消息,并通过重传机制保证终端设备收到消息;其消息格式极其简化,最短是两个字节;其提供订阅和发布模式,高效推送消息。

MQTT有三个角色,包括服务器代理、订阅者和发布者。

  • 1)启动服务器代理。
  • 2)订阅者向服务器代理订阅相关主题。
  • 3)发布者向服务器代理发布主题信息。
  • 4)服务器代理想所有订阅该主题的订阅者推送消息。

MQTT有C/C++语言和JAVA包实现。需要明确的是,MQTT更适用于设备终端和手机APP socket通信,而不能支持浏览器使用。如果要支持微信浏览器应用,还需要增加类似WebsocketServlet技术给浏览器提供支持,这时MQTT以JS接口进行封装,并被调用完成消息推送。

5.CoAP

CoAP是受限制的应用协议(ConstrainedApplication Protocol)的代名词。其基于UDP协议,也就是在设备终端上只需要底层实现UDP协议,而不需要实现较为复杂的TCP协议。这种协议用得比较小。笔者也没有用C语言模拟过,就不展开了。

def1b943b77886f0b01c0ed3efd9c39e.png

作者:柳猫

链接:https://www.imooc.com/article/41612

来源:慕课网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...

5月已经过去,同时也标志着今年上半年手机的发布已经告一段落。那么在这段时间里,智能手机的性价比如何呢?考虑到现在已经开始步入5G时代,所以智能手机的价格也是普遍上涨,想要找到一款性价比不错的手机似乎有些难度。现…

tp3.2 不能提交到action方法_什么是死锁,如何避免死锁(4种方法)

当两个线程相互等待对方释放资源时,就会发生死锁。Python 解释器没有监测,也不会主动采取措施来处理死锁情况,所以在进行多线程编程时应该采取措施避免出现死锁。一旦出现死锁,整个程序既不会发生任何异常,也不会给出任…

虚拟局域网软件开源_ZeroTier虚拟局域网免费远程桌面体验--替代TeamViewer

本文主要是关于使用ZeroTier创建虚拟局域网来实现免费远程桌面的方案的体验,包含了一些对不同方案的优缺点的描述。最近因为疫情在家不得不通过远程连接实验室电脑,有两种基本的解决方案:连接学校VPN,然后使用系统自带的远程桌面连…

java复制的函数会报错,2 面试题之面向对象

大纲:一、两个重要概念① 请说明类和对象的区别类是对某一类实物的描述,是抽象的;对象是一个实实在在的个体,是类的一个实例;② 解释一下什么是类加载机制、双亲委派模型,好处是什么?类加载机制…

sql 除以_不可思议的SQL排名函数,被您无视了么?

经常写SQL脚本的朋友,对查询的多样化要求可能会经常头疼。数据库SQL的语法是固定的、但应用要求却是千差万别的。依靠我们所掌握的知识,大部分的查询需求我们还是有办法的解决的,但总有那么一些要求,把我们搞的非常被动。今天我们…

自制hdmi线一头改vga图_VGA连接线接口定义及引线焊接教程,VGA线不够长时可用网线代替?...

最近做的多媒体功能插座,含有VGA、HDMI、网口、音频输入等接口,由于穿线时没有穿成品线缆,VGA和HDMI接头需要焊接,那么怎么焊接呢?VGA接口15根针,其对应接口定义如下,其下图:一般在V…

sql 分组求和_数据仓库工具–Hive(归纳笔记第六部分:SQL练习)

写在开头:本章是Hive教程第六部分,着重于归纳SQL编写。文章内容输出来源:拉勾教育大数据高薪训练营。本章将介绍Hive中常见的面试题和自己的解答思路,以供大家训练和记忆。SQL面试题1、求连续7天登录的用户— 数据。uid dt status…

Tableau上面地图与条形图结合_何为计算的详细级别,认识Tableau中的Level of Detail...

何为详细级别详细级别,英文Level of detail,Tableau用它来描述计算发生的级别,或者说计算在哪个层级发生。由于BI工具的相似性,在Power BI里也可以用类似的思想对计算进行描述,但Power BI并没有与之对应的专门的词汇。…

java 异步读表,Java实现异步回调-Go语言中文社区

回调(callback)在我们做工程过程中经常会使用到,今天想整理一下回调的原理和使用方法。回调的原理可以简单理解为:A发送消息给B,B处理完后告诉A处理结果。再简单点就是A调用B,B调用A。那么是如何实现的呢?一般而言&…

mysql 按时间累计计算_精通MySQL索引背后的数据结构及算法原理

本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,mysql支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引&a…

matlab数据游标属性设置,将节点属性添加到图论图数据提示

绘制具有数据提示的 GraphPlot 对象创建随机有向图的 GraphPlot 图对象。将额外的节点属性 wifi 添加到该图。rng defaultG digraph(sprandn(20, 20, 0.05));G.Nodes.wifi randi([0 1], 20, 1) 1;h plot(G);向图中添加数据提示。利用数据提示,您能够选择图论图中…

matlab 邻近度 离群点_MATLAB自制迷宫游戏,快来试试吧!

前几天给大家介绍了“一行matlab代码可以做哪些匪夷所思的事情”,今天小编带给大家一款酷炫的私人订制版迷宫游戏。这款迷宫游戏包含以下功能:随机生成迷宫地图通过键盘手动求解生成的迷宫MATLAB自动求解生成的迷宫目前主流的生成迷宫的算法有&#xff1…

matlab中m文件的作用,M文件主要包含()_matlab中m文件的好处

M文件主要包含()答:M函数文件\n\nM命令文件(脚本文件)" src"" style"max-width: 100%; display: inline;">中国大学MOOC: 在缓冲区分析中二次模型的表示的主体对象对临近对象的影响随距离的增大呈线性衰减。答:错巡航速度是…

xcopy复制文件夹及其子文件_嗨学习:如何给电脑中文件夹设置密码

文件夹怎么设置密码,如何给文件夹设置密码?有些重要的文件或比较隐私的文件存放在电脑上,这些文件我们只希望自己能看到并使用,不希望别人访问。那么,最好的办法就是去对这些文件进行加密。 才不怕别人看到自己的隐私,设置密码&a…

php的修改数据库语句怎么写,php的数据库修改语句是什么

php的数据库修改语句是UPDATE,用于更新数据库表中已存在的记录,语法为【UPDATE table_name SET column1value, column2value2,...WHERE some_columnsome 】。本教程操作环境:windows7系统、PHP5.6版,DELL G3电脑。UPDATE 语句用于…

ubuntu20.04中安装划词翻译_教你轻松玩转免安装的网页翻译插件“有道网页翻译2.0”...

大家在日常网页浏览中肯定多多少少都会碰到英文网站,这时候往往需要花费非常多的时候去自行理解,效率低下,又或者借助浏览器自带的翻译功能进行翻译,但又可能遇到翻译不准的情况。现在这个问题可以解决啦!“有道网页翻…

python 主要内容,介绍一些有关python的重要内容

Python的参数传递方式是:位置,默认值,变量参数,关键词参数。传值究竟是函数的值传递还是引用传递,要分情况:不变参数用值传递:像整型和string这样的不变对象是通过拷贝来传递的,因为…

系统业务逻辑书籍_「樊登读书会强推:免费送10本绝密书」彻底改变你的逻辑思维能力...

哈喽~你好我是JS-冰冰今天在星巴克喝咖啡整理了一些巨大价值的绝密资料,从过往在樊登读书会整理的10本彻底改变《逻辑思维能力》的绝密电子书。非常实用,对我的改变和提升非常有帮助,所以想把这份改变命运的绝密大礼包也送给需要的小伙伴~(怎…

饿了么风神登录_海底捞首度登陆第三方外卖!联手饿了么全国配送“小火锅”...

近日,“海底捞”正式联手饿了么推出第三方外卖配送服务。据悉,这是海底捞首次与本地生活服务平台合作推出第三方外卖业务。包括上海、济南、福州、郑州等多个城市的用户登录饿了么平台,下单购买海底捞“小火锅”外送等产品后,便可…

数据相关的在职研究生_南方医科大学2020年招收在职博士研究生导师名单及复试考生名单!...

南方医科大学2020年在职博士研究生入围复试考生名单各位考生:根据我校招收2020年在职博士研究生相关工作规定,现就进入复试考生名单予以公示,请入围复试考生密切关注我校相关复试公告,做好复试准备。南方医科大学招收2020年在职博…