Socket io仅在页面重新加载时发出数据

时间:2016-08-02 16:55:21

标签: javascript node.js express socket.io page-refresh

在express.js项目中,我试图从nodeJS服务器向客户端发送数据。

到达页面后,终端(我从中启动服务器)指出用户已通过套接字连接。但是,在运行包含套接字发出功能的函数时,不会发生任何事情。

只有在重新加载网页时,发出的数据才会显示在html和终端控制台日志中。

下面是在app.js

中的Callback函数中触发套接字的代码
foo(function(fooCallback) {
    console.log('Callback triggered');

    io.on('connection', function(socket) {
        console.log('about to send data via socket');
        io.sockets.emit('person', { 'name': 'Jack Smith' });

    });
});

global.js - (在jquery和socket脚本之后加载客户端js)

    var socket = io.connect();
    socket.on('person', function(socket){
        console.log('client recieved something from socket');
        var personName = socket.name;
        $('#person').html(personName);
    });

为什么仅在重新加载网页时才会发出数据,而不是自动生成?

2 个答案:

答案 0 :(得分:0)

在这段代码中:

io.on('connection', function(socket) {
    console.log('about to send data via socket');
    io.sockets.emit('person', { 'name': 'Jack Smith' });
});

您说您只想在io.sockets.emit('person', { 'name': 'Jack Smith' });变量首次连接时运行io。尝试将其更改为:

io.on('connection', function(socket) {
    console.log('about to send data via socket');
});

io.sockets.emit('person', { 'name': 'Jack Smith' });

答案 1 :(得分:0)

您的问题是,服务器传播连接消息的时间太晚,以至于应用无法在第一次加载时检测到该消息。我不确定你为什么要使用这样的foo回调函数。您的io.on连接逻辑应该直接进入主js文件。然而,可能的方法是初始化var io = io();在那个foo函数里面