socket.io:客户端发出callback不会触发

为了certificate概念,为了validationsocket.io,为了validation,everthing工作得很好,除了我不能让我的发射callback工作在客户端。 我必须在这里失去一些愚蠢的东西,但目前文档并不是杀手锏。 服务器拿起“getSomeData”事件就好了,任何地方都没有错误。

从我在客户端socket.io源文件中可以看到的情况来看,它会检查最后一个发送的参数是否是一个函数,并且总是用它作为callback函数,但是debugging的深度对我来说是有问题的。

我觉得我不得不在这里错过一些核心概念..这不是这个this.send(..)应该做什么? 我在示例应用程序中只能find1个用法,而没有可用的事件发送的客户端代码。

更新 :只是要清楚,我其实是故意排出事件客户端。 这样做的目的是查看是否可以使用socket.io来允许客户端根据请求提取数据以及接收推送数据。

服务器:

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on("getSomeData", function() { this.send({data: "some random data"}); }); }); 

客户端:(console.log从不发生)

 <script type="text/javascript" src="http://localhost/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect('http://localhost'); socket.emit("getSomeData", function(data) { console.log(data); }); </script> 

看起来你有一些逻辑切换,尝试…

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit("getSomeData",{data: "some random data"}); }); 

和客户…

 <script src="http://localhost/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.on("getSomeData", function(data) { console.log(data); }); </script> 

编辑:

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on("getSomeData", function(name,fn) { fn({data: "some random data"}); }); }); 

客户

 <script src="http://localhost/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.emit("getSomeData", function(data) { console.log(data); }); </script> 

在Liam William的回答中,我发现有必要发送callback(或确认函数)作为客户端的第三个参数:

客户:

 <script src="http://localhost/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost'); socket.emit("getSomeData", null, function(data) { console.log(data); }); 

你可以有callback,但你必须有点不同:


服务器:(app.js)

 var io = require('socket.io')(80); io.on('connection', function (socket) { // please note that server will take 2 data entries as function parameter below socket.on('ferret', function (name, fn) { fn('woot'); }); }); 

客户端(index.html)

 var socket = io(); // TIP: io() with no args does auto-discovery socket.on('connect', function () { socket.emit('ferret', 'tobi', function (data) { console.log(data); // data will be 'woot' }); }); 

另外,socket io也提到了这个; 送和获取-DATA-(确认)