我使用带有express和socket.io的节点来创建游戏服务器。我把游戏服务器放在一个额外的模块中 我遇到的问题是我无法在io事件中访问游戏服务器对象。 我该如何解决这个问题,还是应该以不同的方式构建我的项目?
// gameServer.js
'use strict'
var io = require('socket.io');
var socketioJwt = require('socketio-jwt');
var config = require('../config.js');
class GameServer {
constructor(http) {
this.io = new io(http);
this.connectedUsers = [];
this.initSocket();
}
initSocket() {
console.log('users', this.connectedUsers);
this.io.on('connection', this.onConnection);
}
onConnection(socket) {
console.log('users', this.connectedUsers); // undefined
}
}
我像这样初始化服务器:
'use strict'
var express = require('express');
var app = express();
var http = require('http').Server(app);
// init game server
var gameServerApp = new GameServer(http);
http.listen(3000, function() {
console.log('listening on *:3000');
});
我认为这是一个常见的问题,但我无法弄清楚如何解决它。
答案 0 :(得分:0)
您可以bind
this
到this.onConnection
initSocket() {
console.log('users', this.connectedUsers);
this.io.on('connection', this.onConnection.bind(this));
}