首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >socket.io:客户端发出回调永不触发

问socket.io:客户端发出回调永不触发
EN

Stack Overflow用户
提问于 2011-07-20 02:08:28
回答 3查看 39.9K关注 0票数 11

与socket.io混在一起仅仅是为了证明概念,到目前为止,一切都很好,除了我无法在客户端运行我的发射回调之外。我在这里肯定漏掉了一些愚蠢的东西,但目前文档并不是致命的。服务器接收"getSomeData“事件很好,任何地方都没有错误。

从客户端socket.io源代码中可以看出,它检查要发出的最后一个参数是否是函数,并始终将其用作回调,但调试的深度超过这一点对我来说是有问题的。

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

更新:为了明确起见,我实际上是有意发布事件客户端的。这样做的目的是看看除了接收推送之外,是否可以使用socket.io来允许客户端根据请求提取数据。

服务器:

代码语言:javascript
复制
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从未发生过)

代码语言:javascript
复制
<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>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-20 02:43:58

你好像换了点逻辑,试试.

代码语言:javascript
复制
var io = require('socket.io').listen(80);

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

还有客户..。

代码语言:javascript
复制
<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>

编辑:

代码语言:javascript
复制
var io = require('socket.io').listen(80);

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

客户端

代码语言:javascript
复制
<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>
票数 23
EN

Stack Overflow用户

发布于 2014-07-07 18:10:03

在Liam的回答中,我发现有必要在客户机上发出第三个参数时发送回调(或确认函数):

客户端:

代码语言:javascript
复制
<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);
});

​

票数 6
EN

Stack Overflow用户

发布于 2017-02-17 03:26:21

您可以进行回调,但您必须采取一些不同的做法:

服务器:(app.js)

代码语言:javascript
复制
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)

代码语言:javascript
复制
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'
});
});

Actaully,socket io也提到了这个;发送和获取数据-(确认)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6756241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档