node-coap入門(三)——Observe

示例調用v0.12.0版本的node-coap,目前只能在server端經過res.end()觸發finish事件,client端目前還沒實現響應API。但火狐copper插件取消訂閱時,server端能夠觸發finish事件。發現client取消訂閱API的讀者若能與我交流分享,不甚感激。node

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()

啓動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

相關文章
相關標籤/搜索