一尘不染

socket.io:客户端发出的回调永远不会触发

node.js

仅仅为了概念验证而使用socket.io,到目前为止,一切工作都很好,除了我无法在客户端实现我的emit回调。我必须在这里丢失一些愚蠢的东西,但是文档目前还不是杀手。服务器可以很好地拾取“
getSomeData”事件,并且在任何地方都没有错误。

根据我在客户端socket.io源代码中看到的信息,它检查发出的最后一个参数是否是一个函数,并始终将其用作回调,但是对任何更深层的调试对我来说都是成问题的。

我觉得我这里必须缺少一些核心概念。这不是this.send(..)应该做的吗?在示例应用程序中,我只能发现1种用法,而在该事件发出的客户端代码可用的地方,找不到任何一种用法。

更新 :明确地说,我实际上是故意发出事件客户端的。这样做的目的是查看是否可以使用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>

阅读 406

收藏
2020-07-07

共1个答案

一尘不染

看来您已经改变了一些逻辑,请尝试…

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>
2020-07-07