NB-IoT使用笔记(4)在linux下使用搭建CoAP服务

2019-07-13 06:03发布


背景

NB-IoT模块有一个CoAP的功能,CoAP是基于UDP协议的一种带有重传机制的事务处理机制的应用层传输协议。关于CoAP的更多介绍,可以参照这个物联网学习笔记系列里面关于CoAP的文章,应该足够用了。
今天主要是在linux平台上搭建一个CoAP并进行简答的测试,主要参考博客CoAP学习笔记——nodeJS node-coap安装和使用(Linux平台) - 物联网 IoT 经验分享小站 - CSDN博客CoAP协议学习——CoAP基础 - 物联网 IoT 经验分享小站 - CSDN博客

预备知识

关于CoAP的官方介绍(英文版)的可以移步RFC 7252 The Constrained Application Protocol (CoAP)
以下是我认为的一些CoAP的重要特点:
  • 数据包长度小,最小可以达到4字节。
  • 采用请求响应的工作模式,共有4中消息类型:
    • CON(Confirmable):需要被确认的请求,必须做出响应;
    • NON( Non-confirmable):无需确认的请求,不必做响应的消息;
    • ACK(Acknowledgement):应答消息,用于应答CON消息;
    • RST(Reset):复位消息,当接收方接收到有错误的CON或者NON消息后用于重置收发,或者是在接收方重启时发送。
  • 数据包结构:
    数据包结构
    • Ver(Version):版本信息,2bit,标明CoAP的版本;
    • T(Type):消息类型,2bit,从0到3分别是CON、NON、ACK和RST;
    • TKL(Token Length):标记长度,4bit,可变长度的token区域(0~8字节)长度;
    • Code:消息类型2,8bit,3bit指明几个大类,剩下的5bit是对细节的描述,详情可以看官方的说明;
    • Message ID:消息ID,16bit,匹配一次会话所有消息的唯一ID;
    • token:标记,由TKL指定长度,标记ID;
    • payload:有效载荷(可选项);
  • CoAP的URL,类似http,以coap开头,默认端口号5683;
  • CoAP观察者模式:CoAP客户端可以以观察者的身份连接到服务端,在客户端发送RST请求前,服务端会把最新的数据变化发送给客户端而不需要客户端不停地请求。
  • CoAP块传输:CoAP可以对数据进行分片和组装,以适应大规模数据的传输。
  • 支持4种请求方式:GET请求、POST请求、PUT请求和DELETE请求。

搭建与测试

通常的CoAP有node-coap和libcoap两种,这里安装的是node-coap。

安装nodeJS环境

查看机器类型 uname -a 返回 Linux VM_127_26_centos 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux 可以看到我的是x86_64的CPU,将目录转到你想下载安装包的地方,这里直接下载已经编译好的安装包,然后下载https://nodejs.org/download/release/latest-v6.x/(当然也可以下载最新的版本v7、v8)中的对应你自己CPU的版本,并建立链接: wget https://nodejs.org/download/release/latest-v6.x/node-v6.11.5-linux-x64.tar.gz tar xvf node-v6.11.5-linux-x64.tar.gz ln -s node-v6.11.5-linux-x64/bin/node /usr/local/bin/node ln -s node-v6.11.5-linux-x64/bin/npm /usr/local/bin/npm 测试下运行: node -v && npm -version 返回 v6.11.5 3.10.10

安装node-coap

npm install coap --save 已经装完了,没错~简单无脑,这里来写个JS测试下服务器: vim server.js 内容如下: const coap = require('../') // or coap , server = coap.createServer() server.on('request', function(req, res) { res.end('Hello ' + req.url.split('/')[1] + ' ') }) server.listen(function() { console.log('server started') }) 然后执行: node server.js & 这样服务器就okay了,更多的应用可以去GitHub - mcollina/node-coap:CoAP - Node.js style

客户端访问测试

可以用coap客户端进行访问了,这里给出三种方法访问:Firefox浏览器的copper插件、coap-cli和js脚本。

Firefox浏览器

安装了Firefox后可以去Copper(Cu)::Adds-ons for Firefox ,点Adds to Firefox就安装好了。
这里写图片描述
安装成功后浏览器地址栏输入 about::addons可以看到Copper已经安装成功了。
这里写图片描述
最后在地址栏输入 coap:://(服务器的IP地址):5683/ ,点击GET可以看到服务器返回了Hello
这里写图片描述

coap-cli

coap-cli这个可以在服务器上或者linux环境下使用命令行工具coap以客户端的身份连接到服务端
安装coap-cli,并设置软链接: npm install coap-cli -g ln -s ln -s node-v6.11.5-linux-x64/lib/node_modules/coap-cli/index.js /usr/local/bin/coap 发送测试GET数据: coap get coap://localhost/a166865995 返回: (2.05) Hello a166865995 (2.05)可理解为HTTP中的200 OK。关于coap-cli的更多细节可以移步GitHub - mcollina/coap-cli: A command line interface for CoAP built on node-coap

js脚本

编辑客户端脚本: vim client.js 内容: const coap = require('coap') , req = coap.request('coap://localhost/a1668659995') req.on('response', function(res) { res.pipe(process.stdout) }) req.end() 执行并返回结果: node client.js Hello a1668659995 初入CoAP,欢迎小伙伴们一起评论区交流,一起学习~

转载请注明出处