示例調用
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