仅仅为了概念验证而使用socket.io,到目前为止,一切工作都很好,除了我无法在客户端实现我的emit回调。我必须在这里丢失一些愚蠢的东西,但是文档目前还不是杀手。服务器可以很好地拾取“ getSomeData”事件,并且在任何地方都没有错误。
根据我在客户端socket.io源代码中看到的信息,它检查发出的最后一个参数是否是一个函数,并始终将其用作回调,但是对任何更深层的调试对我来说都是成问题的。
我觉得我这里必须缺少一些核心概念。这不是this.send(..)应该做的吗?在示例应用程序中,我只能发现1种用法,而在该事件发出的客户端代码可用的地方,找不到任何一种用法。
this.send(..)
更新 :明确地说,我实际上是故意发出事件客户端的。这样做的目的是查看是否可以使用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>