【发布时间】:2012-02-03 22:04:42
【问题描述】:
当我启动一个新的 GameServer 实例时,它会按如下方式设置套接字和侦听器。
var GameServer = function() {
this.player = new Player();
var that = this;
// Setup sockets and listeners
var socket = io.listen(8000);
socket.sockets.on('connection', function(client) {
client.on('message', that.onSocketMessage);
client.on('disconnect', that.onSocketDisconnect);
});
}
然后我有两个原型 GameServer.prototype.onSocketMessage 和 onSocketDisconnect。
我当前的代码有两个问题:
使用that = this 和闭包?功能。看起来很丑。
当 onSocketMessage 被调用时,想法是它计算出消息是什么,然后调用 GameServer 中的另一个函数。只有这是不可能的,因为现在它属于 socket.io 系统。见下文:
...
function onSocketMessage() {
this.player.move();
}
this.player 不再可用。不再是 GameServer 的一部分。
是否应该在 GameServer 函数和原型之外处理我的套接字设置和消息传递?
或者我还能如何解决这个问题?
干杯
编辑
好的,我已经尝试过了,它可以工作,但我认为它看起来很丑:
var socket = io.listen(8000);
socket.sockets.on('connection', function(client) {
client.on('message', function (data) {
that.onSocketMessage(this, that, data);
});
client.on('disconnect', function() {
that.onSocketDisconnect(this, that);
});
});
可以改进吗?
【问题讨论】:
标签: javascript node.js closures socket.io