【问题标题】:Socket.io not firing events from client to serverSocket.io 不触发从客户端到服务器的事件
【发布时间】:2012-09-21 11:29:51
【问题描述】:

为什么我的服务器不响应客户端发出的事件?我尝试了一些来自 socket.io 网页的简单示例,它们似乎工作正常。

我的目标是每当用户从输入框中聚焦时发出一个事件,比较服务器上的输入值,然后将一个事件返回给客户端。

客户端

$('#userEmail').focusout(function() {
  var value = $('#userEmail').val(); // gets email from the input field
  console.log(value); // prints to console (it works!)
  socket.emit('emailFocusOut', { userEmail: value }); // server doesn't respond to this
});

服务器端

io.sockets.on 'emailFocusOut', (data) ->
  console.log(data)

其他信息

  • 表达 3.0rc4
  • socket.io 0.9.10
  • 咖啡脚本 1.3.3

【问题讨论】:

  • 您可以在浏览器控制台(Chrome 中)上显示的日志中发帖吗?
  • @Omkar:当我从电子邮件输入“集中注意力”时,我会在控制台中打印出来:email@email.com custom.js:47。但是 Node.js 控制台上什么也没有发生。

标签: javascript node.js express websocket socket.io


【解决方案1】:

您必须将自定义事件放在io.sockets.on 函数中。以下代码将起作用:

io.sockets.on('connection', function (socket) {  
  socket.on("emailFocusOut", function(data) {
    console.log(data) // results in: { userEmail: 'awesome' }
  })
});

【讨论】:

    【解决方案2】:

    如果您需要服务器的一些回答,您的服务器应该发送消息回客户端。
    console.log 不做网络回答。

    var io = require('socket.io').listen(80);
    
    io.sockets.on('connection', function(socket) {
        socket.on('emailFocusOut', function(data) {
            data.receivedAt = Date.now();
            socket.emit('emailFocusOutResponse', data); // answer back
        });
    });
    

    然后在客户端你可以监听'emailFocusOutResponse'并处理这个消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2012-04-19
      • 1970-01-01
      相关资源
      最近更新 更多