如何获取对象哪个流?

时间:2014-01-02 00:45:56

标签: node.js stream

我有这样的事情:

//open new socket for every webSocket connection
**socket**.pipe(controller);//controller is writable stream of course

//in controller we have:
controller.prototype._write =function(chunked, encoding, callback){ 
    //here -> how to get **socket** object which piped ?    
    //in 'this' we have controller object
}

甚至可能吗?如果没有尝试建议解决方案如何获得此对象。我需要这个,因为我发送了回复。

编辑: 我想写简单的聊天。还没有代码(我有基本的引擎骨架)。 我可以写一下,但更好的选择是paint:

engine schema 在图片中我没有明确提到我有var SOCKETS - 它存储所有连接套接字,所以Controller知道所有套接字。 问题是Controller,恰好是事件的一些函数监听器(对createRoom,privMessage的响应)不知道来自哪个套接字数据。

1 个答案:

答案 0 :(得分:0)

您可以在pipe事件中获取来源:

controller.on('pipe', function (/* **socket** */) {
    // Save a reference to the socket
});

因此,您可以创建一个包装器来获取引用:

function wrap(controller) {

    var socket = null;

    controller.on('pipe', function (source) {
        socket = source;
    };

    controller.prototype._write =function(chunk, encoding, callback) {
        if (socket) {
            // Do something with socket
        } else {
            // Do something else
        }
    }
}

并使用代码:

var myController = new Controller();

wrap(myController);

mySocket.pipe(myController);