为什么socket io在这种情况下没有收到消息?

时间:2013-02-04 22:19:06

标签: node.js express socket.io

我正在尝试使用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',...)事件永远不会被触发。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您想使用socket.broadcast.emut代替socket.emit

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

请参阅此处了解差异:Whats the difference between io.sockets.emit and broadcast?

答案 1 :(得分:0)

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