2014-09-05 41 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() { 
    /** ... */ 
    }); 
});