2013-04-22 46 views
2

我刚开始使用socket.io.js,并试图在我向客户端发送消息时立即获得在服务器上执行的函数。我的代码如下,socket.io - 服务器上的回调函数emit()没有执行

服务器:

server.on('connection', onConnect); 
var id = 0; 
function onConnect(socket) { 
    socket.emit('myMsg', {id: ++id}, function() {console.log('id callback on server');}); 
} 

客户端:

iosocket.on('myMsg', function(data, callback) { 
    console.log('id:', data.id, callback); 
}); 

但是我看到的回调函数显示为客户端上的 '未定义'。从我阅读的文档中我认为这应该起作用(https://github.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7+),那么有人请让我知道我在这里做错了什么?

+0

我怀疑它的问题,但它应该是'函数的onConnect(插座){' – generalhenry 2013-04-22 18:07:37

+0

在(你)'iosocket.on(...)'只得到一个说法,一个对象'data'回调,'socket.emit(...)'只接受两个参数,一个'id'和一个对象'data'。 – dualed 2013-04-27 08:14:43

回答

0

我认为callback必须是一个函数。试试这个:

iosocket.on('myMsg', function(data, callback) { 
    console.log('id:', data.id); 
    callback(); 
}); 

请参见以下链接的应答区段为例: http://socket.io/#how-to-use

+0

这不是从客户端到服务器?我正在寻找其他方式(通过发射)? – 2013-04-27 07:59:52

+0

是的。它似乎不能以另一种方式工作。也许你应该使用另一个事件。 – 2013-04-28 12:31:18

0

如果您将调用回调函数作为客户端上的功能callback(),它会激活在服务器端的功能,所以它会在你的服务器上的console.log。 如果你只是想从服务器发送消息到客户端,为什么要做2个回调?你可以把它放在数据中:{id:id,something:else)。 如果你想记录在客户端上的东西;

if(data.something) { 
console.log(data.something); //outputs "else" 
}