socket.on()没有接收数据

时间:2014-12-21 13:33:59

标签: javascript node.js express socket.io

我遇到了让socket.on工作的问题

$('#showmsg').click(function() {
var socket = io.connect('http://localhost:3000');
var msgText = $('#msgtext');
socket.emit('show msg', msgText.val());
});

该代码有效,如使用

所示
io.sockets.on('connection', function(socket) {
    socket.on('show msg', function(data) {
        console.log(data);
    });
});

在server.js中,我的主app文件,但在另一个文件中,当我使用代码

    $(document).ready(function (){
        var socket = io.connect();
        socket.on('show msg', function(data) {
            $('#container').hide();
        });
    });

什么都没发生。有谁知道如何让这段代码起作用?

3 个答案:

答案 0 :(得分:1)

在客户端连接时,必须等待connect消息,然后才能使用.emit()发送数据。正如你现在所做的那样,你试图在连接完成之前发送数据,这样数据就会丢失。

请在此处查看客户端示例:http://socket.io/docs/#sending-and-getting-data-(acknowledgements)

答案 1 :(得分:1)

我认为正在发生的事情是,在你的document.ready函数中,你试图调用io.connect(),但是你在套接字连接之前调用show消息。尝试这样做

socket.on('connect', function (){
   socket.on('show msg', function(data) {
        $('#container').hide();
    });
});

答案 2 :(得分:1)

没有任何事情发生,因为你没有发射任何东西。

$(document).ready(function (){
  var socket = io.connect('http://localhost:3000');
  socket.on('show msg', function(data) {
    $('#container').hide();
  });
  socket.emit('show msg', 'right now I am emitting data');
});