目录

NB-IoT,LORA,WIFI,蓝牙,zigbee,4G都是物理层的,这几个都需要芯片模组支持(硬件支持)
而MQTT,COAP,HTTP都是应用层协议,这些需要开发服务器,或者对接云平台厂商(软件支持)
所以(MQTT,COAP,HTTP)是居于(NB-IoT,LORA,WIFI,蓝牙,zigbee,4G)的上层协议物理层中
不需要网关:NB-IoT,4G(芯片可以直接连上移动,联通,电信运营商)
需要网关:LORA,WIFI,zigbee(不能直接连上电信运营商,需要通过一个网关中转才能连上电信运营商)
蓝牙比较特别,是两个蓝牙设备之间互联
NB-IoT低功耗,传输小数据,传输速度底,芯片模组和套餐便宜
4G:传输速度快和可以传输大的数据,但是功耗高,价格贵
WIFI和zigbee对比:
wifi 功耗高,传输数据快,一个路由只能加入较少设备
zigbee功耗低,传输数据慢,可以中继,一个zigbee网关可以加入成千上万的zigbee设备
1、MQTT
mqtt 是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。
在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)、卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用
2、coap
2.1、COAP协议网络传输层由TCP改为UDP。
2.2、基于REST,server的资源地址和互联网一样也有类似url的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化。
2.3、COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑。
2.4、轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了
2.5、支持可靠传输,数据重传,块传输。 确保数据可靠到达。
2.6、支持IP多播, 即可以同时向多个设备发送请求。
2.7、非长连接通信,适用于低功耗物联网场景。
优点:
缺点:
应用场景:
缺点:
应用场景:
ZigBee是一种低速短距离传输的无线协议
优点:
缺点:
应用场景:
移动网络
优点:
缺点:
应用场景:
窄带物联网(Narrow Band Internet of Things,NB-IoT)可直接部署于GSM网络(2G)、UMTS网络或LTE网络(4G),以降级部署成本、实现平滑升级。
优点:
缺点:
LoRa是低功耗局域网无线标准
优点:
缺点:
应用场景:

LoRa或ZigBee不能直接接入互联网,所以需要用到网关
网关又称网间连接器、协议转换器。网关在网络层以上实现网络互联,是复杂的网络互联设备,仅用于两个高层协议的网络互联

TCP是一种面向连接、可靠的、基于字节流的传输层通信协议
特点:
缺点:
用户数据报协议,支持一个无连接的传输协议
特点:
缺点:
| TCP | UDP |
|---|---|
| 可靠 | 不可靠 |
| 面向连接 | 无连接 |
| 传输效率低 | 传输效率高 |
| 高 | 低 |
UDP更适合对功率要求高、可靠性要求不高的场合
HTTP是基于客户/服务器模式,且面向连接的(建立在TCP之上)。典型的HTTP事务处理有如下的过程:
缺点:
结论:
MQTT是一个基于客户端/服务器的消息发布/订阅的传输协议。
机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家具、及一些小型化设备中已广泛使用。
CoAP是一种在物联网世界的类web协议,名字翻译来就是”受限应用程序“。
| CoAP | MQTT | |
|---|---|---|
| 通信机制 | 同步 | 异步 |
| 连接方式 | UDP | TCP |
| 使用场景 | 物联网 | 更适合推送 |
| 功耗 | 低 | 高 |
| 支持平台 | 阿里云、百度、腾讯QQ物联等 | 华为、中兴、移动 |
| 反向控制 | 不支持 | 支持 |
MQTT协议是保持连接的,所以及时性相对很好。
CoAP协议是无连接响应式通讯,因此不能主动推送,要等客户端访问才可以携带回去,及时性相对较差。
LwM2它的全称是Lightweight Machine-To-Machine,它的名称里面包含了这么两个重要含义:
是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
Rails中有没有一种方法可以提取与路由关联的HTTP动词?例如,给定这样的路线:将“users”匹配到:“users#show”,通过:[:get,:post]我能实现这样的目标吗?users_path.respond_to?(:get)(显然#respond_to不是正确的方法)我最接近的是通过执行以下操作,但它似乎并不令人满意。Rails.application.routes.routes.named_routes["users"].constraints[:request_method]#=>/^GET$/对于上下文,我有一个设置cookie然后执行redirect_to:ba
我正在使用Heroku(heroku.com)来部署我的Rails应用程序,并且正在构建一个iPhone客户端来与之交互。我的目的是将手机的唯一设备标识符作为HTTPheader传递给应用程序以进行身份验证。当我在本地测试时,我的header通过得很好,但在Heroku上它似乎去掉了我的自定义header。我用ruby脚本验证:url=URI.parse('http://#{myapp}.heroku.com/')#url=URI.parse('http://localhost:3000/')req=Net::HTTP::Post.new(url.path)#boguspara
我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token
我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)
我正在尝试解析网页,但有时会收到404错误。这是我用来获取网页的代码:result=Net::HTTP::getURI.parse(URI.escape(url))如何测试result是否为404错误代码? 最佳答案 像这样重写你的代码:uri=URI.parse(url)result=Net::HTTP.start(uri.host,uri.port){|http|http.get(uri.path)}putsresult.codeputsresult.body这将打印状态码和正文。
我正在安装gitlabhq,并且在Gemfile中有对某些资源的“git://...”的引用。但是,我在公司防火墙后面,所以我必须使用http://。我可以手动编辑Gemfile,但我想知道是否有另一种方法告诉bundler使用http://作为git存储库? 最佳答案 您可以通过运行gitconfig--globalurl."https://".insteadOfgit://或通过将以下内容添加到~/.gitconfig:[url"https://"]insteadOf=git://
我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)