2016-08-02 23 views
1

有沒有辦法篡改socket.io發送/接收之前發送的數據?我正在考慮像一個明確的中間件。
因此,我可以在調用普通的.emit()方法之後並且在調用socket.on(...)之前編碼數據。用於socket.io的BISON編碼/解碼中間件?

在快遞我會想象它有點像這對野牛解碼所有傳入的請求:

app.use(function(req, res, next) { 
    req.body = BISON.decode(req.body); 
    next(); 
}); 

現在怎麼可能有socket.io在請求被髮送後,也會自動進行編碼的方式來完成?

我知道socket.io支持中間件以類似的形式來表達,但僅適用於socket.io發送到創建WebSocket連接實際的HTTP請求......

io.use(function(socket, next) { 
    //... 
    next(); 
}); 

所以我無疑,這將是這裏的任何幫助..

回答

1

您可以通過監聽packet事件截獲(和變化)的數據,同樣使用flush事件攔截傳出消息:

io.use(function(socket, next) { 
    socket.conn.on('packet', function(packet) { 
    ...change `packet.data` here... 
    }); 
    socket.conn.on('flush', function(packets) { // array of packets 
    ... 
    }); 
    next(); 
}); 

但說實話,我很難找到有關如何編碼packet.data的文檔,所以我無法提供完整的示例。

編輯socket.io-parserdecodeString()這是用來解析有效載荷。可悲的是,它不會被導出(並且導出的的方法都是異步的,這與事件處理程序不能很好地結合)。

+0

非常有趣。所以我基本上必須分叉它或以某種方式提取特定的功能。嗯...這感覺很有點哈克。你確定沒有其他方法可以做到這一點嗎? – Forivin

+0

我同意它感覺哈克,但我一直沒有找到替代方案(這並不意味着沒有任何,當然:-) – robertklep

+0

這似乎不適用於客戶端順便說一句。任何想法? – Forivin