示例调用
v0.12.0
版本的node-coap,目前只能在server
端通过res.end()
触发finish
事件,client
端目前还没实现响应API。但火狐copper插件取消订阅时,server
端可以触发finish
事件。发现client
取消订阅API的读者若能与我交流分享,不甚感激。
node-coap示例中observe的示例只简单介绍了observe请求的创建,本文重点介绍如何处理server端每次发来的observe响应。
observe_server
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')
})
observe_client
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()
启动server
$ 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
事件。