生产环境使用redis和mongodb

This commit is contained in:
zhl 2021-01-29 18:37:38 +08:00
parent d647870ce2
commit 4132663fef
3 changed files with 42 additions and 11 deletions

View File

@ -478,7 +478,7 @@ interface Array<T> {
* @returns {boolean} true * @returns {boolean} true
* false * false
*/ */
remove?(t: T): boolean; removeEx?(t: T): boolean;
/** /**
* *
@ -580,6 +580,13 @@ interface Array<T> {
* @param arr * @param arr
*/ */
difference?<T>(arr: T[]): T[]; difference?<T>(arr: T[]): T[];
/**
* Map
* @param {string} key map的key字段名
* @return {Map<any, T>}
*/
toMap?<T>(key: string): Map<any, T>;
} }
Object.defineProperties(Array.prototype, { Object.defineProperties(Array.prototype, {
@ -614,7 +621,7 @@ Object.defineProperties(Array.prototype, {
}, },
writable: true writable: true
}, },
remove: { removeEx: {
value: function <T>(this: T[], t: T) { value: function <T>(this: T[], t: T) {
let idx = this.indexOf(t); let idx = this.indexOf(t);
if (~idx) { if (~idx) {
@ -858,6 +865,18 @@ Object.defineProperties(Array.prototype, {
return [...set1]; return [...set1];
}, },
writable: true writable: true
},
toMap: {
value: function<T> (this: T[], key: string) {
let result: Map<any, T> = new Map()
for(const o of this) {
// @ts-ignore
result.set(o[key], o)
}
return result
},
writable: true
} }
}); });

View File

@ -1,7 +1,7 @@
import http from "http"; import http from "http";
import express from "express"; import express from "express";
import cors from "cors"; import cors from "cors";
import {Server} from "colyseus"; import { RedisPresence, Server } from 'colyseus'
import {monitor} from "@colyseus/monitor"; import {monitor} from "@colyseus/monitor";
import rateLimit from "express-rate-limit"; import rateLimit from "express-rate-limit";
// import socialRoutes from "@colyseus/social/express" // import socialRoutes from "@colyseus/social/express"
@ -9,15 +9,16 @@ import {GeneralRoom} from "./rooms/GeneralRoom";
import {initData} from "./common/GConfig"; import {initData} from "./common/GConfig";
import {Config} from "./cfg/Config"; import {Config} from "./cfg/Config";
import {RankedLobbyRoom} from "./rooms/RankedLobbyRoom"; import {RankedLobbyRoom} from "./rooms/RankedLobbyRoom";
import { MongooseDriver } from 'colyseus/lib/matchmaker/drivers/MongooseDriver'
require('./rooms/MSender'); require('./rooms/MSender');
require('./rooms/RoomExtMethod'); require('./rooms/RoomExtMethod');
require('./common/Extend'); require('./common/Extend');
const isProd = process.env.NODE_ENV === 'production'
let config: Config = require('../config/config.json'); let config: Config = require('../config/config.json');
const port = Number(process.env.PORT || 2567);
// const port = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE);
const app = express() const app = express()
@ -25,11 +26,22 @@ app.use(cors());
app.use(express.json()) app.use(express.json())
initData(); initData();
const server = http.createServer(app); const server = http.createServer(app);
const gameServer = new Server({ let port
server, let gameServer
// driver: new MongooseDriver(config.mongodb), if (isProd) {
// presence: new RedisPresence({url: config.redis}), port = Number(process.env.PORT) + Number(process.env.NODE_APP_INSTANCE);
}); gameServer = new Server({
server,
driver: new MongooseDriver(config.mongodb),
presence: new RedisPresence({url: config.redis}),
});
} else {
port = Number(process.env.PORT || 2567);
gameServer = new Server({
server,
});
}
// register your room handlers // register your room handlers
gameServer.define('general_room', GeneralRoom); gameServer.define('general_room', GeneralRoom);

View File

@ -439,7 +439,7 @@ export class RankedLobbyRoom extends Room {
let data = [...stat.clients.values()][0] let data = [...stat.clients.values()][0]
stat.rank = data.options.rank stat.rank = data.options.rank
} else { } else {
this.stats.remove(stat) this.stats.removeEx(stat)
} }
} }