获取循环套接字对象nodejs

时间:2015-05-24 11:35:51

标签: javascript jquery node.js sockets properties

所以,我有这个奇怪的问题:首先,我连接到这样的套接字:

window.GLOBAL_socket = io.connect('http://localhost:8080');

然后,如果我打印出window.GLOBAL_socket变量,我得到一个循环变量,其中包含属性' connected'如果连接成功,则设置为true;如果不是在谷歌Chrome控制台中看到,则设置为false。但是当我写下以下内容时:

console.log(window.GLOBAL_socket.connected);

它总是返回' false'。任何人都知道为什么这不会改变? (同样的情况发生在'断开';当我打印出整个变量时会发生变化,但在打印出属性时保持“真实”。

亲切的问候,

芝诺

1 个答案:

答案 0 :(得分:1)

问题是你太早打印出来了。它尚未连接。因此,您打印出来的内容是正确的 - 它没有连接。

它在控制台中工作的原因是因为当你输入控制台时,它已经连接好了。

为了证明这一点,请稍后将其打印出来:

setTimeout(function(){
    console.log(window.GLOBAL_socket.connected);
},5000); // hopefully 5 seconds is long enough to connect
         // adjust this as necessary

或者你可以继续记录,直到它连接起来:

var connect_check = setInterval(function(){
    console.log(window.GLOBAL_socket.connected);
    if (window.GLOBAL_socket.connected) {
        clearInterval(connect_check);
    }
},10); // do this 100 times per second

稍后执行某项功能的另一种方法是将其附加到onclick事件:

<button id="log">Log Connected Status</button>
<script>
    document.getElementById('log').onclick = function(){
        console.log(window.GLOBAL_socket.connected);
    };
</script>

当然,你可以简单地使用socket.io连接事件:

GLOBAL_socket.on('connection',function(){
    // But then the following is redundant because we KNOW
    // it's connected because we're in this event handler.
    console.log(window.GLOBAL_socket.connected);
});