修改环境变量使用
This commit is contained in:
@@ -13,6 +13,7 @@ import './app/servers/user.rpc.define'
|
|||||||
import * as routeUtil from './app/util/routeUtil';
|
import * as routeUtil from './app/util/routeUtil';
|
||||||
import { preload } from './preload';
|
import { preload } from './preload';
|
||||||
var checkEventFilter = require('./app/servers/battle/filter/checkEventFilter');
|
var checkEventFilter = require('./app/servers/battle/filter/checkEventFilter');
|
||||||
|
import { connectRedis } from './config/redis';
|
||||||
|
|
||||||
// TODO 需要整理。
|
// TODO 需要整理。
|
||||||
import _pinus = require('pinus');
|
import _pinus = require('pinus');
|
||||||
@@ -21,13 +22,7 @@ const filePath = (_pinus as any).FILEPATH;
|
|||||||
filePath.MASTER = '/config/master';
|
filePath.MASTER = '/config/master';
|
||||||
filePath.SERVER = '/config/servers';
|
filePath.SERVER = '/config/servers';
|
||||||
filePath.CRON = '/config/crons';
|
filePath.CRON = '/config/crons';
|
||||||
// if(process.env.NODE_ENV == 'local') {
|
filePath.LOG = '/config/log4js';
|
||||||
filePath.LOG = '/config/log4js.local';
|
|
||||||
// } else if(process.env.NODE_ENV == 'prod'){
|
|
||||||
// filePath.LOG = '/config/log4js.prod';
|
|
||||||
// } else {
|
|
||||||
// filePath.LOG = '/config/log4js.prod';
|
|
||||||
// }
|
|
||||||
filePath.SERVER_PROTOS = '/config/serverProtos';
|
filePath.SERVER_PROTOS = '/config/serverProtos';
|
||||||
filePath.CLIENT_PROTOS = '/config/clientProtos';
|
filePath.CLIENT_PROTOS = '/config/clientProtos';
|
||||||
filePath.MASTER_HA = '/config/masterha';
|
filePath.MASTER_HA = '/config/masterha';
|
||||||
@@ -45,32 +40,36 @@ adminfilePath.ADMIN_USER = 'config/adminUser';
|
|||||||
*/
|
*/
|
||||||
preload();
|
preload();
|
||||||
|
|
||||||
let mongoAddr = 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098';
|
|
||||||
if(process.env.NODE_ENV == 'local') {
|
|
||||||
mongoAddr = 'mongodb://127.0.0.1/zyz';
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建 mongodb 连接
|
|
||||||
mongoose.connect(mongoAddr, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false }, (err) => {
|
|
||||||
if (err) {
|
|
||||||
console.log('mongodb connect err', err);
|
|
||||||
} else {
|
|
||||||
console.log('mongodb connect suc');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Init app for client.
|
* Init app for client.
|
||||||
*/
|
*/
|
||||||
let app = pinus.createApp();
|
let app = pinus.createApp();
|
||||||
app.set('name', 'chatofpomelo-websocket');
|
app.set('name', 'chatofpomelo-websocket');
|
||||||
// TODO 重启 1 次只需要初始化 1 次,判断方法可以优化
|
|
||||||
if (app.serverId === 'master-server-1') {
|
// 加载数据库和redis
|
||||||
redisService.initAllRank();
|
app.configure(function() {
|
||||||
redisService.clearComBtlQueue();
|
app.loadConfig('database', app.getBase() + '/config/database');
|
||||||
}
|
|
||||||
|
mongoose.connect(app.get('database').mongo, { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: false }, (err) => {
|
||||||
|
if (err) {
|
||||||
|
console.log('mongodb connect err', err);
|
||||||
|
} else {
|
||||||
|
console.log('mongodb connect suc');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const redisClient = connectRedis(app.get('database').redis);
|
||||||
|
app.set('redis', redisClient);
|
||||||
|
|
||||||
|
// TODO 重启 1 次只需要初始化 1 次,判断方法可以优化
|
||||||
|
if (app.serverId === 'master-server-1') {
|
||||||
|
redisService.initAllRank();
|
||||||
|
redisService.clearComBtlQueue();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// app configuration
|
// app configuration
|
||||||
app.configure('production|development|local', 'connector', function () {
|
app.configure('production|development|alpha|dev', 'connector', function () {
|
||||||
app.set('connectorConfig',
|
app.set('connectorConfig',
|
||||||
{
|
{
|
||||||
connector: pinus.connectors.hybridconnector,
|
connector: pinus.connectors.hybridconnector,
|
||||||
@@ -95,7 +94,7 @@ app.configure('production|development|local', 'connector', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.configure('production|development|local', 'gate', function () {
|
app.configure('production|development|alpha|dev', 'gate', function () {
|
||||||
app.set('connectorConfig',
|
app.set('connectorConfig',
|
||||||
{
|
{
|
||||||
connector: pinus.connectors.hybridconnector,
|
connector: pinus.connectors.hybridconnector,
|
||||||
@@ -128,7 +127,7 @@ export function globalErrorHandler(err: Error, msg: any, resp: any,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// app configure
|
// app configure
|
||||||
app.configure('production|development|local', function () {
|
app.configure('production|development|alpha|dev', function () {
|
||||||
app.set(RESERVED.ERROR_HANDLER, errorHandler);
|
app.set(RESERVED.ERROR_HANDLER, errorHandler);
|
||||||
app.set(RESERVED.GLOBAL_ERROR_HANDLER, globalErrorHandler);
|
app.set(RESERVED.GLOBAL_ERROR_HANDLER, globalErrorHandler);
|
||||||
app.globalAfter((err: Error, routeRecord: RouteRecord, msg: any, session: FrontendOrBackendSession, resp: any, cb: HandlerCallback) => {
|
app.globalAfter((err: Error, routeRecord: RouteRecord, msg: any, session: FrontendOrBackendSession, resp: any, cb: HandlerCallback) => {
|
||||||
@@ -169,7 +168,7 @@ app.configure('production|development|local', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
app.configure('development|local', function () {
|
app.configure('development', function () {
|
||||||
// enable the system monitor modules
|
// enable the system monitor modules
|
||||||
app.enable('systemMonitor');
|
app.enable('systemMonitor');
|
||||||
app.enable('rpcDebugLog');
|
app.enable('rpcDebugLog');
|
||||||
|
|||||||
@@ -31,10 +31,6 @@ export class GateHandler {
|
|||||||
}
|
}
|
||||||
// select connector
|
// select connector
|
||||||
let res = dispatch(userCode, connectors);
|
let res = dispatch(userCode, connectors);
|
||||||
if(process.env.NODE_ENV=='local') {
|
return resResult(STATUS.SUCCESS, {host: res.clientHost, port: res.clientPort});
|
||||||
return resResult(STATUS.SUCCESS, {host: '127.0.0.1', port: res.clientPort});
|
|
||||||
} else {
|
|
||||||
return resResult(STATUS.SUCCESS, {host: res.clientHost, port: res.clientPort});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,68 +4,39 @@ import * as Redis from 'redis';
|
|||||||
import {REDIS_KEY} from '../consts'
|
import {REDIS_KEY} from '../consts'
|
||||||
import { GameModel } from "../db/Game";
|
import { GameModel } from "../db/Game";
|
||||||
import { promisifyAll } from 'bluebird';
|
import { promisifyAll } from 'bluebird';
|
||||||
|
import { pinus } from 'pinus';
|
||||||
// 映射 redis 接口
|
|
||||||
declare module 'redis' {
|
|
||||||
export interface RedisClient extends NodeJS.EventEmitter {
|
|
||||||
hdelAsync(...args: any[]): Promise<any>;
|
|
||||||
spopAsync(...args: any[]): Promise<any>;
|
|
||||||
sremAsync(...args: any[]): Promise<any>;
|
|
||||||
sismemberAsync(...args: any[]): Promise<any>;
|
|
||||||
srandmemberAsync(...args: any[]): Promise<any>;
|
|
||||||
delAsync(...args: any[]): Promise<any>;
|
|
||||||
}
|
|
||||||
export interface Multi extends Commands<Multi> {
|
|
||||||
execAsync(...args: any[]): Promise<any>;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let redisArr = 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com';
|
|
||||||
if(process.env.NODE_ENV == 'local') {
|
|
||||||
redisArr = '127.0.0.1';
|
|
||||||
}
|
|
||||||
// 创建 redis 连接
|
|
||||||
const oldRedisClient = Redis.createClient(6379, redisArr, {detect_buffers: true});
|
|
||||||
oldRedisClient.auth('zyz_2020', (err, reply) => {
|
|
||||||
if (err) {
|
|
||||||
console.log('redis err', err);
|
|
||||||
} else {
|
|
||||||
console.log('redis suc');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// 转 promise
|
|
||||||
const client = promisifyAll(oldRedisClient) as Redis.RedisClient;
|
|
||||||
client.set('hello', 'redis', Redis.print);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在服务重新启动时,将信息存入redis
|
* 在服务重新启动时,将信息存入redis
|
||||||
*/
|
*/
|
||||||
export async function initAllRank() {
|
export async function initAllRank() {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
const serverList = await GameModel.getAllServerList();
|
const serverList = await GameModel.getAllServerList();
|
||||||
await redisDel(REDIS_KEY.USER_INFO);
|
await client.delAsync(REDIS_KEY.USER_INFO);
|
||||||
for(let {id} of serverList) {
|
for(let {id} of serverList) {
|
||||||
await redisDel(getKeyName(REDIS_KEY.TOWER_RANK, id));
|
await client.delAsync(getKeyName(REDIS_KEY.TOWER_RANK, id));
|
||||||
await initRank(id);
|
await initRank(id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function initRank(serverId: number) {
|
export async function initRank(serverId: number) {
|
||||||
// console.log('*****', 'initRank')
|
// console.log('*****', 'initRank')
|
||||||
await redisExpire(getKeyName(REDIS_KEY.TOWER_RANK, serverId), 30 * 24 * 60 * 60);
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
await redisExpire(REDIS_KEY.USER_INFO, 30 * 24 * 60 * 60);
|
await client.expireAsync(getKeyName(REDIS_KEY.TOWER_RANK, serverId), 30 * 24 * 60 * 60);
|
||||||
|
await client.expireAsync(REDIS_KEY.USER_INFO, 30 * 24 * 60 * 60);
|
||||||
|
|
||||||
let ranks = await RoleModel.getRank('tower', serverId, ['roleId', 'roleName', 'towerLv', 'lv', 'vLv']);
|
let ranks = await RoleModel.getRank('tower', serverId, ['roleId', 'roleName', 'towerLv', 'lv', 'vLv']);
|
||||||
for(let {towerLv, roleId, roleName, lv, vLv, towerUpTime} of ranks) {
|
for(let {towerLv, roleId, roleName, lv, vLv, towerUpTime} of ranks) {
|
||||||
// console.log(roleId);
|
// console.log(roleId);
|
||||||
await redisZadd(getKeyName(REDIS_KEY.TOWER_RANK, serverId), encodeScoreWithTime(towerLv, towerUpTime?towerUpTime.getTime():0), roleId);
|
await client.zaddAsync(getKeyName(REDIS_KEY.TOWER_RANK, serverId), encodeScoreWithTime(towerLv, towerUpTime?towerUpTime.getTime():0), roleId);
|
||||||
await redisUserInfoAdd(roleId, {roleName, lv, vLv, guildName:"", head: "zhaoyun"});
|
await redisUserInfoAdd(roleId, {roleName, lv, vLv, guildName:"", head: "zhaoyun"});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排行榜是否存在
|
// 排行榜是否存在
|
||||||
export async function existsRank(key: string, serverId: number) {
|
export async function existsRank(key: string, serverId: number) {
|
||||||
const result = await redisExists(getKeyName(key, serverId));
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
|
const result = await client.existsAsync(getKeyName(key, serverId));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -75,31 +46,35 @@ export function getKeyName(key: string, serverId: number) {
|
|||||||
|
|
||||||
// 更新玩家信息
|
// 更新玩家信息
|
||||||
export async function redisUserInfoUpdate(roleId: string, arr: Array<{field: string, value:(string|number)}>) {
|
export async function redisUserInfoUpdate(roleId: string, arr: Array<{field: string, value:(string|number)}>) {
|
||||||
let params = await redisHget(REDIS_KEY.USER_INFO, roleId);
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
|
let params = await client.hgetAsync(REDIS_KEY.USER_INFO, roleId);
|
||||||
if(params) {
|
if(params) {
|
||||||
let obj = JSON.parse(params);
|
let obj = JSON.parse(params);
|
||||||
for(let {field, value} of arr) {
|
for(let {field, value} of arr) {
|
||||||
obj[field] = value;
|
obj[field] = value;
|
||||||
}
|
}
|
||||||
return await redisHset(REDIS_KEY.USER_INFO, roleId, JSON.stringify(obj));
|
return await client.hsetAsync(REDIS_KEY.USER_INFO, roleId, JSON.stringify(obj));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 添加玩家信息缓存
|
// 添加玩家信息缓存
|
||||||
export async function redisUserInfoAdd(roleId: string, params: {roleName: string, lv: number, vLv: number, guildName: string, head: string}) {
|
export async function redisUserInfoAdd(roleId: string, params: {roleName: string, lv: number, vLv: number, guildName: string, head: string}) {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let value = JSON.stringify(params);
|
let value = JSON.stringify(params);
|
||||||
return await redisHset(REDIS_KEY.USER_INFO, roleId, value);
|
return await client.hsetAsync(REDIS_KEY.USER_INFO, roleId, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新排行榜
|
// 更新排行榜
|
||||||
export async function setRank(key: string, serverId: number, roleId: string, score: number, timestamp: number, params: {roleName: string, lv: number, vLv: number, guildName: string, head: string}) {
|
export async function setRank(key: string, serverId: number, roleId: string, score: number, timestamp: number, params: {roleName: string, lv: number, vLv: number, guildName: string, head: string}) {
|
||||||
|
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
// 更新分数
|
// 更新分数
|
||||||
const _score = encodeScoreWithTime(score, timestamp);
|
const _score = encodeScoreWithTime(score, timestamp);
|
||||||
await redisZadd(getKeyName(key, serverId), _score, roleId);
|
await client.zaddAsync(getKeyName(key, serverId), _score, roleId);
|
||||||
// 移除100名以外
|
// 移除100名以外
|
||||||
await redisZremRangeByRank(getKeyName(key, serverId), 100, 10000);
|
await client.zremrangebyrankAsync(getKeyName(key, serverId), 100, 10000);
|
||||||
// 如果没有信息,更新玩家信息
|
// 如果没有信息,更新玩家信息
|
||||||
const hasCurUser = await redisHexists(REDIS_KEY.USER_INFO, roleId);
|
const hasCurUser = await client.hexistsAsync(REDIS_KEY.USER_INFO, roleId);
|
||||||
if(!hasCurUser) {
|
if(!hasCurUser) {
|
||||||
await redisUserInfoAdd(roleId, params);
|
await redisUserInfoAdd(roleId, params);
|
||||||
}
|
}
|
||||||
@@ -108,12 +83,14 @@ export async function setRank(key: string, serverId: number, roleId: string, sco
|
|||||||
|
|
||||||
// 获取排行榜
|
// 获取排行榜
|
||||||
export async function getRank(key: string, serverId: number, roleId: string) {
|
export async function getRank(key: string, serverId: number, roleId: string) {
|
||||||
|
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let ranks = [], myRank = null;
|
let ranks = [], myRank = null;
|
||||||
const rankFromDb = await redisZrevrangeByScore(getKeyName(key, serverId), '+inf', '-inf', true, 100);
|
const rankFromDb = await client.zrevrangebyscoreAsync(getKeyName(key, serverId), '+inf', '-inf', "WITHSCORES", "LIMIT", 0, 100);
|
||||||
for(let ii = 0; ii < rankFromDb.length; ii+=2) {
|
for(let ii = 0; ii < rankFromDb.length; ii+=2) {
|
||||||
const _roleId = rankFromDb[ii];
|
const _roleId = rankFromDb[ii];
|
||||||
const _score = decodeScoreWithTime(rankFromDb[ii + 1]);
|
const _score = decodeScoreWithTime(rankFromDb[ii + 1]);
|
||||||
const userInfo = await redisHget(REDIS_KEY.USER_INFO, _roleId);
|
const userInfo = await client.hgetAsync(REDIS_KEY.USER_INFO, _roleId);
|
||||||
const _userInfo = JSON.parse(userInfo);
|
const _userInfo = JSON.parse(userInfo);
|
||||||
const tmp = {..._userInfo, roleId: _roleId, num: _score, rank: Math.floor(ii/2)+1}
|
const tmp = {..._userInfo, roleId: _roleId, num: _score, rank: Math.floor(ii/2)+1}
|
||||||
ranks.push(tmp);
|
ranks.push(tmp);
|
||||||
@@ -141,6 +118,7 @@ function decodeScoreWithTime(num: string): number {
|
|||||||
|
|
||||||
// 把寻宝的玩家信息存入 redis
|
// 把寻宝的玩家信息存入 redis
|
||||||
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>) {
|
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>) {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let cmds = [];
|
let cmds = [];
|
||||||
qualityArr.forEach(quality => {
|
qualityArr.forEach(quality => {
|
||||||
if (quality) {
|
if (quality) {
|
||||||
@@ -156,16 +134,19 @@ export async function setTeamSearchReq(roleId: string, sid: string, qualityArr:
|
|||||||
|
|
||||||
// 取出 0 - 2 个某品质的匹配中玩家,并在其它品质中删除此玩家信息
|
// 取出 0 - 2 个某品质的匹配中玩家,并在其它品质中删除此玩家信息
|
||||||
export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array<number>) {
|
export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array<number>) {
|
||||||
|
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
let cmds = [];
|
let cmds = [];
|
||||||
for (let q of qualityArr) {
|
for (let q of qualityArr) {
|
||||||
cmds.push(['srem', `${REDIS_KEY.COM_TEAM_SEARCH_PRE}${q}`, `${roleId}:${sid}`]);
|
cmds.push(['srem', `${REDIS_KEY.COM_TEAM_SEARCH_PRE}${q}`, `${roleId}:${sid}`]);
|
||||||
};
|
};
|
||||||
const multiClient = client.multi(cmds) as Redis.Multi;
|
const multiClient = client.multi(cmds) as Redis.Multi;
|
||||||
const newMulti = promisifyAll(multiClient) as Redis.Multi;
|
const newMulti = promisifyAll(multiClient) as Redis.Multi;
|
||||||
await newMulti.execAsync();
|
await newMulti.execAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getTeamSearchByQuality(quality: number) {
|
export async function getTeamSearchByQuality(quality: number) {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
// TODO: 操作不具有原子性
|
// TODO: 操作不具有原子性
|
||||||
const userInfos = await client.srandmemberAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, 2);
|
const userInfos = await client.srandmemberAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, 2);
|
||||||
console.log('getTeamSearchByQuality: ' + userInfos);
|
console.log('getTeamSearchByQuality: ' + userInfos);
|
||||||
@@ -190,6 +171,7 @@ export async function getTeamSearchByQuality(quality: number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array<number>) {
|
export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array<number>) {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
for (let quality of qualityArr) {
|
for (let quality of qualityArr) {
|
||||||
let res = await client.sismemberAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, `${roleId}:${sid}`);
|
let res = await client.sismemberAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${quality}`, `${roleId}:${sid}`);
|
||||||
if (res) {
|
if (res) {
|
||||||
@@ -200,84 +182,10 @@ export async function checkRoleInQueue(roleId: string, sid: string, qualityArr:
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function clearComBtlQueue() {
|
export async function clearComBtlQueue() {
|
||||||
|
const client: Redis.RedisClient = pinus.app.get('redis');
|
||||||
for (let q of GOOD_QUALITY) {
|
for (let q of GOOD_QUALITY) {
|
||||||
client.delAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${q}`);
|
client.delAsync(`${REDIS_KEY.COM_TEAM_SEARCH_PRE}${q}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************** 寻宝相关 end */
|
/**************** 寻宝相关 end */
|
||||||
|
|
||||||
////// redis方法
|
|
||||||
|
|
||||||
//// key
|
|
||||||
|
|
||||||
// key 是否存在。
|
|
||||||
export async function redisExists(key: string) {
|
|
||||||
return await createPromise('exists', [key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 在 key 存在时删除 key。
|
|
||||||
export async function redisDel(key: string) {
|
|
||||||
return await createPromise('del', [key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 设置过期时间
|
|
||||||
export async function redisExpire(key: string, seconds: number) {
|
|
||||||
return await createPromise('expire', [key, seconds]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//// 有序集合
|
|
||||||
|
|
||||||
// 返回有序集中指定分数区间内的成员,分数从高到低排序
|
|
||||||
export async function redisZrevrangeByScore(key: string, max: (number|string), min: (number|string), withscores: boolean, limit?:number, offset=0): Promise<Array<string>> {
|
|
||||||
let param = [key, max, min];
|
|
||||||
if(withscores) param.push('WITHSCORES');
|
|
||||||
if(limit) param.push('LIMIT', offset, limit);
|
|
||||||
return await createPromise('zrevrangebyscore', param);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 向有序集合添加一个或多个成员,或者更新已存在成员的分数
|
|
||||||
export async function redisZadd(key: string, field: number, value: string) {
|
|
||||||
return await createPromise('zadd', [key, field, value]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取有序集合的成员数
|
|
||||||
export async function redisZcard(key: string) {
|
|
||||||
return await createPromise('zcard', [key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 移除有序集合中给定的排名区间的所有成员
|
|
||||||
export async function redisZremRangeByRank(key: string, start: number, stop: number) {
|
|
||||||
return await createPromise('zremrangebyrank', [key, start, stop]);
|
|
||||||
}
|
|
||||||
|
|
||||||
//// 哈希
|
|
||||||
|
|
||||||
// 将哈希表 key 中的字段 field 的值设为 value
|
|
||||||
export async function redisHset(key: string, field: string, value: string) {
|
|
||||||
return await createPromise('hset', [key, field, value]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取存储在哈希表中指定字段的值。
|
|
||||||
export async function redisHget(key: string, field: string) {
|
|
||||||
return await createPromise('hget', [key, field]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取存储在哈希表中指定字段的值。
|
|
||||||
export async function redisHexists(key: string, field: string) {
|
|
||||||
return await createPromise('hexists', [key, field]);
|
|
||||||
}
|
|
||||||
|
|
||||||
///// 封装promise
|
|
||||||
function createPromise(type: string, params: Array<string|number|any>):Promise<any> {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
const cb = function(err: Error, result: any) {
|
|
||||||
if(err) {
|
|
||||||
reject(err);
|
|
||||||
} else {
|
|
||||||
resolve(result);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
client[type].apply(client, [...params, cb]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
16
game-server/config.js
Normal file
16
game-server/config.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
var fs = require('fs');
|
||||||
|
function main (){
|
||||||
|
var args = process.argv.splice(2)
|
||||||
|
if (args.length !== 1) {
|
||||||
|
return console.log('参数请填写环境变量');
|
||||||
|
}
|
||||||
|
|
||||||
|
let configObject = {
|
||||||
|
env: args[0]
|
||||||
|
};
|
||||||
|
let result = JSON.stringify(configObject);
|
||||||
|
|
||||||
|
fs.writeFileSync(__dirname + '/config.json', result, 'utf8');
|
||||||
|
}
|
||||||
|
|
||||||
|
main();
|
||||||
1
game-server/config.json
Normal file
1
game-server/config.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"env":"development"}
|
||||||
19
game-server/config/database.ts
Normal file
19
game-server/config/database.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
module.exports = {
|
||||||
|
'development': {
|
||||||
|
'mongo': 'mongodb://127.0.0.1/zyz',
|
||||||
|
'redis': '127.0.0.1'
|
||||||
|
},
|
||||||
|
|
||||||
|
'production': {
|
||||||
|
'mongo': 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098',
|
||||||
|
'redis': 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com'
|
||||||
|
},
|
||||||
|
'alpha': {
|
||||||
|
'mongo': 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098',
|
||||||
|
'redis': 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com'
|
||||||
|
},
|
||||||
|
'dev': {
|
||||||
|
'mongo': 'mongodb://dbop:zyzdbopbantu@dds-8vbdb47c6fb58a541.mongodb.zhangbei.rds.aliyuncs.com:3717,dds-8vbdb47c6fb58a542.mongodb.zhangbei.rds.aliyuncs.com:3717/zyz?replicaSet=mgset-500808098',
|
||||||
|
'redis': 'r-8vb4i2kgl91886fkxd.redis.zhangbei.rds.aliyuncs.com'
|
||||||
|
}
|
||||||
|
};
|
||||||
170
game-server/config/development/log4js.ts
Normal file
170
game-server/config/development/log4js.ts
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
module.exports = {
|
||||||
|
'appenders': {
|
||||||
|
'console': {
|
||||||
|
'type': 'console'
|
||||||
|
},
|
||||||
|
'logger': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/logger.log',
|
||||||
|
'pattern': 'connector',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/log.log',
|
||||||
|
'pattern': 'connector',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'con-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/con-log-${opts:serverId}.log',
|
||||||
|
'pattern': 'connector',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'rpc-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/rpc-log-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'forward-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/forward-log-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'rpc-debug': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/rpc-debug-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'crash-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/crash.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'admin-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/admin.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-default.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'error': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/error.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus-admin': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-admin.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus-rpc': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-rpc-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'categories': {
|
||||||
|
'default': {
|
||||||
|
'appenders': ['console'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'pinus': {
|
||||||
|
'appenders': ['console', 'pinus'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'con-log': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'rpc-log': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'forward-log': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'rpc-debug': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'crash-log': {
|
||||||
|
'appenders': ['console', 'crash-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'admin-log': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'pinus-admin': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'pinus-rpc': {
|
||||||
|
'appenders': ['console', 'log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'logger': {
|
||||||
|
'appenders': ['console', 'logger'],
|
||||||
|
'level': 'error'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'prefix': '${opts:serverId} ',
|
||||||
|
'replaceConsole': true,
|
||||||
|
'lineDebug': false,
|
||||||
|
'errorStack': true
|
||||||
|
};
|
||||||
@@ -4,13 +4,17 @@ module.exports = {
|
|||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'port': 3005
|
'port': 3005
|
||||||
},
|
},
|
||||||
|
|
||||||
'production': {
|
'production': {
|
||||||
'id': 'master-server-1',
|
'id': 'master-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'port': 3005
|
'port': 3005
|
||||||
},
|
},
|
||||||
'local': {
|
'alpha': {
|
||||||
|
'id': 'master-server-1',
|
||||||
|
'host': '127.0.0.1',
|
||||||
|
'port': 3005
|
||||||
|
},
|
||||||
|
'dev': {
|
||||||
'id': 'master-server-1',
|
'id': 'master-server-1',
|
||||||
'host': '127.0.0.1',
|
'host': '127.0.0.1',
|
||||||
'port': 3005
|
'port': 3005
|
||||||
|
|||||||
@@ -117,6 +117,10 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
'categories': {
|
'categories': {
|
||||||
|
'default': {
|
||||||
|
'appenders': ['console'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
'pinus': {
|
'pinus': {
|
||||||
'appenders': ['console', 'pinus'],
|
'appenders': ['console', 'pinus'],
|
||||||
'level': 'debug'
|
'level': 'debug'
|
||||||
134
game-server/config/production/log4js.ts
Normal file
134
game-server/config/production/log4js.ts
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
module.exports = {
|
||||||
|
'appenders': {
|
||||||
|
'console': {
|
||||||
|
'type': 'console'
|
||||||
|
},
|
||||||
|
'con-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/con-log-${opts:serverId}.log',
|
||||||
|
'pattern': 'connector',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'rpc-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/rpc-log-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'forward-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/forward-log-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'rpc-debug': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/rpc-debug-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'crash-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/crash.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'admin-log': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/admin.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus-admin': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-admin.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
},
|
||||||
|
'pinus-rpc': {
|
||||||
|
'type': 'file',
|
||||||
|
'filename': '${opts:base}/logs/pinus-rpc-${opts:serverId}.log',
|
||||||
|
'maxLogSize': 1048576,
|
||||||
|
'layout': {
|
||||||
|
'type': 'basic'
|
||||||
|
},
|
||||||
|
'backups': 5
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
'categories': {
|
||||||
|
'default': {
|
||||||
|
'appenders': ['console', 'pinus'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'con-log': {
|
||||||
|
'appenders': ['con-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'rpc-log': {
|
||||||
|
'appenders': ['rpc-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'forward-log': {
|
||||||
|
'appenders': ['forward-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'rpc-debug': {
|
||||||
|
'appenders': ['rpc-debug'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'crash-log': {
|
||||||
|
'appenders': ['crash-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'admin-log': {
|
||||||
|
'appenders': ['admin-log'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'pinus-admin': {
|
||||||
|
'appenders': ['pinus-admin'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
'pinus-rpc': {
|
||||||
|
'appenders': ['pinus-rpc'],
|
||||||
|
'level': 'debug'
|
||||||
|
},
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
'prefix': '${opts:serverId} ',
|
||||||
|
'replaceConsole': true,
|
||||||
|
'lineDebug': false,
|
||||||
|
'errorStack': true
|
||||||
|
};
|
||||||
63
game-server/config/redis.ts
Normal file
63
game-server/config/redis.ts
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
import * as Redis from 'redis';
|
||||||
|
import { promisifyAll } from 'bluebird';
|
||||||
|
|
||||||
|
// 映射 redis 接口
|
||||||
|
declare module 'redis' {
|
||||||
|
export interface RedisClient extends NodeJS.EventEmitter {
|
||||||
|
// key 是否存在。
|
||||||
|
existsAsync(key: string): Promise<number>;
|
||||||
|
// 在 key 存在时删除 key。
|
||||||
|
delAsync(key: string): Promise<number>;
|
||||||
|
// 设置过期时间
|
||||||
|
expireAsync(key: string, time: number): Promise<number>;
|
||||||
|
|
||||||
|
// 删除哈希表 key 中的一个或多个指定字段
|
||||||
|
hdelAsync(key: string, field: string): Promise<number>;
|
||||||
|
// 将哈希表 key 中的字段 field 的值设为 value
|
||||||
|
hsetAsync(key: string, field: string, value: string): Promise<number>;
|
||||||
|
// 获取存储在哈希表中指定字段的值
|
||||||
|
hgetAsync(key: string, field: string): Promise<string>;
|
||||||
|
|
||||||
|
// 移除并返回集合中的一个随机元素
|
||||||
|
spopAsync(key: string, count?: number): Promise<number>;
|
||||||
|
// 移除集合中一个或多个成员
|
||||||
|
sremAsync(key: string, member: string): Promise<number>;
|
||||||
|
// 返回集合中一个或多个随机数
|
||||||
|
srandmemberAsync(key: string, count?: number): Promise<string|string[]>;
|
||||||
|
// 判断成员元素是否是集合的成员
|
||||||
|
sismemberAsync(key: string, member: string): Promise<boolean>;
|
||||||
|
|
||||||
|
// 向有序集合添加一个或多个成员,或者更新已存在成员的分数
|
||||||
|
zaddAsync(key: string, score: number, member: string): Promise<number>;
|
||||||
|
// 返回有序集中指定分数区间内的成员,分数从高到低排序
|
||||||
|
zrevrangebyscoreAsync(key: string, max: (string|number), min: (string|number), withscores?: string, limit?:string, offset?: number, count?:number): Promise<string[]>;
|
||||||
|
// 获取有序集合的成员数
|
||||||
|
zcardAsync(key: string): Promise<number>;
|
||||||
|
// 移除有序集合中给定的排名区间的所有成员
|
||||||
|
zremrangebyrankAsync(key: string, start: number, stop: number): Promise<number>;
|
||||||
|
// 获取存储在哈希表中指定字段的值。
|
||||||
|
hexistsAsync(key: string, field: string): Promise<number>;
|
||||||
|
}
|
||||||
|
export interface Multi extends Commands<Multi> {
|
||||||
|
execAsync(...args: any[]): Promise<any>;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function connectRedis(redisArr: string) {
|
||||||
|
|
||||||
|
// 创建 redis 连接
|
||||||
|
const oldRedisClient = Redis.createClient(6379, redisArr, {detect_buffers: true});
|
||||||
|
oldRedisClient.auth('zyz_2020', (err, reply) => {
|
||||||
|
if (err) {
|
||||||
|
console.log('redis err', err);
|
||||||
|
} else {
|
||||||
|
console.log('redis suc');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// 转 promise
|
||||||
|
const client = promisifyAll(oldRedisClient) as Redis.RedisClient;
|
||||||
|
client.set('hello', 'redis', Redis.print);
|
||||||
|
|
||||||
|
return client;
|
||||||
|
}
|
||||||
@@ -1,81 +1,5 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
'development': {
|
'development': {
|
||||||
'connector': [
|
|
||||||
{
|
|
||||||
'id': 'connector-server-1',
|
|
||||||
'host': '127.0.0.1',
|
|
||||||
'port': 4050,
|
|
||||||
'clientHost': 'zyzdev.trgame.cn',
|
|
||||||
'clientPort': 3050,
|
|
||||||
'frontend': true,
|
|
||||||
'args': '--inspect=10001'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'chat': [
|
|
||||||
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050, 'args': '--inspect=10002'},
|
|
||||||
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051, 'args': '--inspect=10004'},
|
|
||||||
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052, 'args': '--inspect=10005'}
|
|
||||||
],
|
|
||||||
'role': [
|
|
||||||
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053, 'args': '--inspect=10006'}
|
|
||||||
],
|
|
||||||
'battle': [
|
|
||||||
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054, 'args': '--inspect=10007'}
|
|
||||||
],
|
|
||||||
'gm': [
|
|
||||||
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055, 'args': '--inspect=10009'}
|
|
||||||
],
|
|
||||||
'gate': [
|
|
||||||
{
|
|
||||||
'id': 'gate-server-1',
|
|
||||||
'host': '127.0.0.1',
|
|
||||||
'clientHost': 'zyzdev.trgame.cn',
|
|
||||||
'clientPort': 3014,
|
|
||||||
'frontend': true,
|
|
||||||
'args': '--inspect=10003'
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'id': 'gate-server-2',
|
|
||||||
'host': '127.0.0.1',
|
|
||||||
'clientHost': 'zyzdev.trgame.cn',
|
|
||||||
'clientPort': 3015,
|
|
||||||
'frontend': true,
|
|
||||||
'args': '--inspect=10008'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'production': {
|
|
||||||
'connector': [
|
|
||||||
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
|
||||||
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
|
||||||
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
|
||||||
],
|
|
||||||
'chat': [
|
|
||||||
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
|
||||||
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051},
|
|
||||||
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052}
|
|
||||||
],
|
|
||||||
'role': [
|
|
||||||
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053}
|
|
||||||
],
|
|
||||||
'battle': [
|
|
||||||
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
|
||||||
],
|
|
||||||
'gate': [
|
|
||||||
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
|
||||||
{
|
|
||||||
'id': 'gate-server-2',
|
|
||||||
'host': '127.0.0.1',
|
|
||||||
'clientHost': 'zyzdev.trgame.cn',
|
|
||||||
'clientPort': 3015,
|
|
||||||
'frontend': true
|
|
||||||
}
|
|
||||||
],
|
|
||||||
'gm': [
|
|
||||||
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
'local': {
|
|
||||||
'connector': [
|
'connector': [
|
||||||
{
|
{
|
||||||
'id': 'connector-server-1',
|
'id': 'connector-server-1',
|
||||||
@@ -115,5 +39,98 @@ module.exports = {
|
|||||||
'frontend': true
|
'frontend': true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
'production': {
|
||||||
|
'connector': [
|
||||||
|
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
||||||
|
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
||||||
|
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'pinus_test.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
||||||
|
],
|
||||||
|
'chat': [
|
||||||
|
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
||||||
|
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051},
|
||||||
|
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052}
|
||||||
|
],
|
||||||
|
'role': [
|
||||||
|
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053}
|
||||||
|
],
|
||||||
|
'battle': [
|
||||||
|
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
||||||
|
],
|
||||||
|
'gate': [
|
||||||
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'pinus_test.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
||||||
|
{
|
||||||
|
'id': 'gate-server-2',
|
||||||
|
'host': '127.0.0.1',
|
||||||
|
'clientHost': 'pinus_test.trgame.cn',
|
||||||
|
'clientPort': 3015,
|
||||||
|
'frontend': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'gm': [
|
||||||
|
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'alpha': {
|
||||||
|
'connector': [
|
||||||
|
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
||||||
|
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
||||||
|
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyz_web.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
||||||
|
],
|
||||||
|
'chat': [
|
||||||
|
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
||||||
|
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051},
|
||||||
|
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052}
|
||||||
|
],
|
||||||
|
'role': [
|
||||||
|
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053}
|
||||||
|
],
|
||||||
|
'battle': [
|
||||||
|
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
||||||
|
],
|
||||||
|
'gate': [
|
||||||
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyz_web.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
||||||
|
{
|
||||||
|
'id': 'gate-server-2',
|
||||||
|
'host': '127.0.0.1',
|
||||||
|
'clientHost': 'zyz_web.trgame.cn',
|
||||||
|
'clientPort': 3015,
|
||||||
|
'frontend': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'gm': [
|
||||||
|
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
'dev': {
|
||||||
|
'connector': [
|
||||||
|
{'id': 'connector-server-1', 'port': 4050, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3050, 'frontend': true},
|
||||||
|
{'id': 'connector-server-2', 'port': 4051, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3051, 'frontend': true},
|
||||||
|
{'id': 'connector-server-3', 'port': 4052, 'clientHost': 'zyzdev.trgame.cn', 'host': '127.0.0.1', 'clientPort': 3052, 'frontend': true}
|
||||||
|
],
|
||||||
|
'chat': [
|
||||||
|
{'id': 'chat-server-1', 'host': '127.0.0.1', 'port': 6050},
|
||||||
|
{'id': 'chat-server-2', 'host': '127.0.0.1', 'port': 6051},
|
||||||
|
{'id': 'chat-server-3', 'host': '127.0.0.1', 'port': 6052}
|
||||||
|
],
|
||||||
|
'role': [
|
||||||
|
{'id': 'role-server-1', 'host': '127.0.0.1', 'port': 6053}
|
||||||
|
],
|
||||||
|
'battle': [
|
||||||
|
{'id': 'battle-server-1', 'host': '127.0.0.1', 'port': 6054}
|
||||||
|
],
|
||||||
|
'gate': [
|
||||||
|
{'id': 'gate-server-1', 'host': '127.0.0.1', 'clientHost': 'zyzdev.trgame.cn', 'clientPort': 3014, 'frontend': true},
|
||||||
|
{
|
||||||
|
'id': 'gate-server-2',
|
||||||
|
'host': '127.0.0.1',
|
||||||
|
'clientHost': 'zyzdev.trgame.cn',
|
||||||
|
'clientPort': 3015,
|
||||||
|
'frontend': true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
'gm': [
|
||||||
|
{'id': 'gm-server-1', 'host': '127.0.0.1', 'port': 6055}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,7 +8,8 @@
|
|||||||
var cwd='/game-server';
|
var cwd='/game-server';
|
||||||
|
|
||||||
//项目的运行环境
|
//项目的运行环境
|
||||||
var envType= 'production';
|
var config = require('./config.json');
|
||||||
|
var envType= config.env;
|
||||||
|
|
||||||
//配置文件的输出目录
|
//配置文件的输出目录
|
||||||
var outputFilePath = './pomeloPm2Start.json';
|
var outputFilePath = './pomeloPm2Start.json';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"cov": "nyc mocha",
|
"cov": "nyc mocha",
|
||||||
"ci": "yarn run test",
|
"ci": "yarn run test",
|
||||||
"gen-api-ref": "node ../../../node_modules/typedoc/bin/typedoc --mode file --hideGenerator --excludeExternals --ignoreCompilerErrors --out ../../../run/site/public/api-reference/pinus-loader lib/",
|
"gen-api-ref": "node ../../../node_modules/typedoc/bin/typedoc --mode file --hideGenerator --excludeExternals --ignoreCompilerErrors --out ../../../run/site/public/api-reference/pinus-loader lib/",
|
||||||
"local": "npm run build && cd dist && NODE_ENV=local pinus start"
|
"local": "npm run build && cd dist && pinus start"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typegoose/typegoose": "^7.3.5",
|
"@typegoose/typegoose": "^7.3.5",
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ export function preload() {
|
|||||||
|
|
||||||
// 捕获普通异常
|
// 捕获普通异常
|
||||||
process.on('uncaughtException', function (err) {
|
process.on('uncaughtException', function (err) {
|
||||||
|
console.log(err)
|
||||||
console.error(pinus.app.getServerId(), 'uncaughtException Caught exception: ', err);
|
console.error(pinus.app.getServerId(), 'uncaughtException Caught exception: ', err);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +1,24 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
rsync -av --include '.babelrc' --include '.eslintrc.js' --exclude '.*' --exclude 'node_modules' --exclude 'bower_components' --exclude 'dist' --progress --inplace --no-owner --no-group --rsh='ssh -p22' . root@ltctest:/root/zyz/game-server/
|
if [ $# != 1 ] ; then
|
||||||
|
echo "需要1个参数"
|
||||||
|
echo "stable: 同步代码到 stable 服务器上,作为正式服使用"
|
||||||
|
echo "alpha: 同步代码到 alpha 服务器上,作为测试服供服务开发使用"
|
||||||
|
echo "dev: 同步代码到 dev 服务器上,作为测试服供服务开发使用"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ${1} == 'stable' ] ; then
|
||||||
|
destUrl="root@zyz:/root/zyz/game-server"
|
||||||
|
elif [ ${1} == 'alpha' ] ; then
|
||||||
|
destUrl="root@zyzalpha:/root/zyz/game-server"
|
||||||
|
elif [ ${1} == 'dev' ] ; then
|
||||||
|
destUrl="root@zyzdev:/root/zyz/game-server"
|
||||||
|
else
|
||||||
|
echo "需要一个参数指明服务器"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
node ./config.js ${1}
|
||||||
|
|
||||||
|
rsync -av --include '.babelrc' --include '.eslintrc.js' --exclude '.*' --exclude './game-server/node_modules' --exclude './game-server/node_modules' --exclude './game-server/dist' --exclude 'node_modules' --exclude 'bower_components' --exclude 'dist' --progress --inplace --no-owner --no-group --rsh='ssh -p22' . ${destUrl}
|
||||||
|
git checkout ./config.json
|
||||||
@@ -17,4 +17,8 @@ else
|
|||||||
echo "需要一个参数指明服务器"
|
echo "需要一个参数指明服务器"
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
rsync -av --include '.babelrc' --include '.eslintrc.js' --exclude '.*' --exclude './game-server/node_modules' --exclude './game-server/node_modules' --exclude 'node_modules' --exclude 'bower_components' --exclude 'dist' --progress --inplace --no-owner --no-group --rsh='ssh -p22' . ${destUrl}
|
|
||||||
|
node ./game-server/config.js ${1}
|
||||||
|
|
||||||
|
rsync -av --include '.babelrc' --include '.eslintrc.js' --exclude '.*' --exclude './game-server/node_modules' --exclude './game-server/node_modules' --exclude './game-server/dist' --exclude 'node_modules' --exclude 'bower_components' --exclude 'dist' --progress --inplace --no-owner --no-group --rsh='ssh -p22' . ${destUrl}
|
||||||
|
git checkout ./game-server/config.json
|
||||||
Reference in New Issue
Block a user