访问Websocket.onmessage()之外的变量

时间:2013-02-01 18:15:46

标签: javascript node.js websocket

这个问题涉及NodeJS中的WebSocket API(即var webSocketServer = require('websocket')。server;)。

function Game(canvas) {
    this.wArray;
    this.runConnection();
    // I want to be able to see changes in variables at this point
    console.log(this.wArray[1][2]); // is out of scope or something
}

_p = Game.prototype;

_p.runConnection = function() {
    this.connection = new WebSocket('ws://localhost:1337');
    this.connection.onmessage = function (message) {
           this.wArray = JSON.parse(message.data);
    };
    // code here runs before code inside onmessage, it must be asychronous
};

所以当我从服务器收到消息时,我应该能够接收该消息并在我的代码中更新一些变量等。目前,似乎所有我能做的就是更新onmessage函数内部的东西。所有在线示例都只显示在onmessage中使用console.log()的人。我希望服务器能够发送我的客户端信息,然后使用该信息更新我的游戏运行时的某些方面。我认为onmessage()存在一定程度的异步性。

请告诉我如何获取通过WebSocket.onmessage()传递给我的数据,并将其存储在可在整个游戏中访问的变量中。

2 个答案:

答案 0 :(得分:1)

onMessage作为回调函数异步触发。因此,您必须注意您正在使用的变量范围。有许多可能使用:代理,更改范围,功能,bind()等,您可以搜索之前的答案。 (有很多)

作为一个简单的例子,您可以使用自变量在其他地方访问它;但是,它显然取决于整个脚本的目的。

function Game(canvas) {
    this.wArray = [];
    this.runConnection();
    console.log(this.wArray[1][2]); 
   //log()  will likely not work as you should wait for [1][2] to be filled
}

_p = new Game();

_p.runConnection = function() {
    this.connection = new WebSocket('ws://localhost:1337');
    var self = this;
    this.connection.onmessage = function (message) {
           self.wArray.push(JSON.parse(message.data));
        };
};

答案 1 :(得分:0)

我建议查看now.js,它允许客户端和服务器在同一名称空间中运行,这允许两端共享内容。

编辑..

我仍在研究这一点,显然事情正在发生变化。这个帖子解释了它link