示例调用
v0.12.0
版本的node-coap,目前只能在server
端经过res.end()
触发finish
事件,client
端目前还没实现响应API。但火狐copper插件取消订阅时,server
端能够触发finish
事件。发现client
取消订阅API的读者若能与我交流分享,不甚感激。node
node-coap示例中observe的示例只简单介绍了observe请求的建立,本文重点介绍如何处理server端每次发来的observe响应。服务器
const coap = require('coap') , server = coap.createServer() server.on('request', function(req, res) { //判断是不是Observe请求 if (req.headers['Observe'] !== 0) return res.end(new Date().toISOString() + '\n') //定时将日期写入ObserveWriteStream var count = 0 var interval = setInterval(function() { count++ res.write(new Date().toISOString() + '\n') if (count === 3) { clearInterval(interval) //结束观察模式 res.end() } }, 1000) //结束观察模式后触发finish事件 res.on('finish', function(err) { console.log('finsh') }) }) server.listen(function() { console.log('server started') })
var coap = require('coap') , req = coap.request({ observe: true }) //统计触发response事件的次数 var resp_count = 0 req.on('response', function(res) { //输出响应结果 res.pipe(process.stdout) resp_count++ console.log('触发resp:' + resp_count) //统计触发data事件的次数 var data_count = 0 //每次收到服务器发来的observe响应时触发data事件 res.on('data',function(data){ data_count++ console.log('触发data:' + data_count + '\n-------\n') //data事件次数达到3时关闭监听 if(data_count === 3) res.close() }) }) req.end()
启动serverui
$ node observe_server server start
启动client插件
$ node observe_client 触发resp:1 2015-10-17T05:26:53.773Z 触发data:1 ------- 2015-10-17T05:26:54.787Z 触发data:2 ------- 2015-10-17T05:26:55.797Z 触发data:3 -------
此时,启动server的终端:命令行
$ node observe_server server started finsh
从命令行的输出咱们能够知道,client进入observe模式时,只有第一次触发response
事件,每次都触发data
事件。code