当前位置: 首页 > 面试题库 >

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

林鹏鹍
2023-03-14
问题内容

仅仅为了概念验证而使用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>

问题答案:

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

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>


 类似资料:
  • 我正在使用windows,当socket.io发出事件时,命令提示符显示以下内容: 我想不出问题出在哪里,我做错了什么?

  • 编辑:我设法把我的问题简化成一些非常简单的事情: 这段代码没问题: 这段代码断开了客户端的连接!:

  • 问题内容: 我遵循了Google提供的“ 本地服务”示例,但是我始终返回false,并且从未调用过。 我知道那会立即返回,但是我的对象永远不会触发。 我不知道这些是否适用 我的活动在tabHost内运行,我想知道这是否可以以任何方式影响服务绑定。 服务本身可能有问题,但是我可以将启动服务调用到具有相同功能的相同服务,并且可以按预期工作。 有任何人对此有经验吗?请帮帮我。 谢谢,PS我的目标是And

  • 我目前正在迁移(创建新的firebase项目),从美国-中央1到亚洲-东南2。我正在使用Firestore,Firebase存储和云功能。 我对Firebase存储和Firestore没有任何问题,我可以按照预期保存数据。因为可能firestore和firebase存储都在默认位置(asia-southeast2)。 问题出在云功能上。asia-southeast2没有云功能。所以我将我的可调用云

  • 问题内容: 看过很多论坛,但没有找到答案…简单的东西,用@PostLoad注释的方法永远不会被调用…通过@EntityListeners添加了侦听器,但问题仍然存在。我正在使用基于SessionFactory的配置。 问题答案: 当使用基于基础的配置时,EJB3 注释不起作用,后期加载方法将永远不会被调用。 使用Hibernate的Interceptor或事件或基于基本的配置。