2014-09-05 21 views
0

我正在尋找通過查詢字符串發送數據到我的節點,然後讓它解析查詢並採取相應的行動。socket.emit函數內

var app = require('http').createServer(handler), 
io = require('socket.io').listen(app), 
url = require('url'); 

app.listen(61337); 

function handler(request, response) { 
    var requestURL = url.parse(request.url, true); 

    if(requestURL.query.message) { 
     var data = JSON.parse(decodeURI(requestURL.query.message)); 
     pushMe(data); 
    } 

    /** ... */ 
} 

function pushMe(data) { 
    io.sockets.socket(data.socketid).emit(data.action, data.value); 
} 

io.sockets.on('connection', function(socket) { 
    socket.on('join', function(data) { 
    /** ... */ 
    }); 

    socket.on('disconnect', function() { 
    /** ... */ 
    }); 
}); 

如何過我的pushMe函數返回一個錯誤:類型錯誤:對象沒有方法「發出」

如何從我的功能發出的數據?

+0

是'io.sockets.socket'的功能?你正試圖調用它。如果它是一個對象,你需要方括號,像'io.sockets.socket [data.socketid]' – apsillers 2014-09-05 16:14:40

+0

顯然它沒什麼,用方括號我得到「不能讀取undefined的屬性」 – C0NFUS3D 2014-09-05 17:15:58

+1

啊,你用的是socket.io 1.0?他們已經大大改變了API。也許[通過它的socket.id發送消息給客戶端](http://stackoverflow.com/questions/8467784/sending-a-message-to-a-client-via-its-socket-id)會有幫助? – apsillers 2014-09-05 17:18:41

回答

0

我需要整個插座保存到一個數組,然後訪問它的方式......

var app = require('http').createServer(handler), 
io = require('socket.io').listen(app), 
url = require('url'); 

app.listen(61337); 

var registeredSockets = []; 

function handler(request, response) { 
    var requestURL = url.parse(request.url, true); 

    if(requestURL.query.message) { 
     var data = JSON.parse(decodeURI(requestURL.query.message)); 
     pushMe(data); 
    } 

    /** ... */ 
} 

function pushMe(data) { 
    registeredSockets[data.socketid].emit(data.action, data.value); 
} 

io.sockets.on('connection', function(socket) { 
    socket.on('join', function(data) { 
    registeredSockets[socket.id] = socket; 
    /** ... */ 
    }); 

    socket.on('disconnect', function() { 
    /** ... */ 
    }); 
});