为啥在这种情况下套接字 io 不接收消息?

Posted

技术标签:

【中文标题】为啥在这种情况下套接字 io 不接收消息?【英文标题】:why is socket io not receiving messages in this situation?为什么在这种情况下套接字 io 不接收消息? 【发布时间】:2013-01-19 17:52:15 【问题描述】:

我正在尝试使用 Node.js、socket.io 和 Express 在两条路由之间发送一条简单的消息。

这是我的特快路线:

app.get('/', routes.index);
app.get('/controller', routes.controller);

还有我在服务器端的socket.io:

io.sockets.on('connection', function (socket) 
    socket.emit('test', );
      socket.on('clicked', function(data) 
      console.log('clicked received');
      socket.emit('do_stuff', data);
    );
);

在我的索引页面中:

<script>
var socket = io.connect('http://localhost:3001');
socket.on('test', function(data) 
  console.log('test received');
);
socket.on('do_stuff', function(data) 
  console.log('should do stuff here');
);
</script>

在我的控制器页面中:

  <button id='the_button'>Click Me</button>

  <script>
    var socket = io.connect('http://localhost:3001'); 
    socket.on('test', function(data) 
      console.log('test recieved');
    );
    $(function() 
      $("#the_button").click(function(e) 
        socket.emit("clicked", );
    );
  </script>

我希望“do_stuff”在控制器页面上单击按钮时触发索引页面上的某些功能。但是,socket.on('do_stuff',...) 事件永远不会被触发。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

您想使用socket.broadcast.emut 而不是socket.emit

socket.emit 只发送回发送消息的套接字

查看这里的区别:Whats the difference between io.sockets.emit and broadcast?

【讨论】:

【参考方案2】:

在从事件处理程序发出事件之前确保套接字处于连接状态!!

【讨论】:

以上是关于为啥在这种情况下套接字 io 不接收消息?的主要内容,如果未能解决你的问题,请参考以下文章

套接字 IO 日志记录:在 Swift/iOS 中得到消息 3

套接字 io 仅在最后接收消息

zmq 交换和 HWM

为啥在使用Ping命令的时候,总会出现不通的情况呢?

ioctl() 用于 C 中的套接字编程

socket io 广播、房间和确认功能