学习 pomelo 的第一天 框架

首先 安装 架构 npm install pomelo -g 然后到 命令行生成文件 命令是
pomelo init 进行如下图![在这里在这里插入图片描述
完成之后打开生成的项目
在这里插入图片描述
game_server 是所有游戏的服务器 所有的功能逻辑都在这个目录下
game-server/app.js 是入口文件
game-server/app:这个是春芳游戏逻辑功能的相关代码都在这个子目录下
servers 目录下是可以新 创建多个目录扶我去 在 pomelo 中是 使用 路径来区分服务器类型的
game-server/log 这个是日志目录 存放 所有游戏的 日志文件
game-server/config 存放游戏服务器的向光配置文件目录 想日志 服务区 数据库 等所有配置文件
shared 公共的代码存放处 这里可以放一些代码
行动项目的命令行
game-start在这里插入图片描述
取浏览取中输入 出翔这个界面 就应该没有问题了
开始创建分布式服务区 然后进行相关的 配置

首先在 servers 的文件夹 下生成这这几个文件   !

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191202152712658.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20191202152841558.png)

这几个代表的 都是服务器
在一般情况下用户量一台机器就可以支撑,但用户量多了就得扩充服务器,gate服务器的作用就相当于前端负载均衡服务器;

客户端向gate服务器发出请求,gate服务器会给客户端分配一个connector服务器;
创建完成之后配置 config 的 josn 文件 来连接 访问
配置 master.json
{
“development”: {
“id”: “master-server-1”, “host”: “127.0.0.1”, “port”: 3005
},
“production”: {
“id”: “master-server-1”, “host”: “127.0.0.1”, “port”: 3005
}
}

然后在配置 servers。josn 文件
注意这个是 你 服务器的 名字 以及 端口 连接子接口的端口 虽然我也不明白怎么回事先记得 以后再说;
{
“development”:{
“connector”: [
{“id”: “connector-server-1”, “host”: “127.0.0.1”, “port”: 3150, “clientHost”: “127.0.0.1”, “clientPort”: 3010, “frontend”: true}
],
“gate”:[
{“id”:“gata-server-1”,“host”:“127.0.0.1”,“port”:3350,“clientPort”:3250,“frontend”:true,“auto-restart”:true}
],
“hall”:[
{“id”:“hall-server-1”,“host”:“127.0.0.1”,“port”:4200}
],
“versus”:[
{
“id”:“sersus-server-1”,“host”:“127.0.0.1”,“port”:4250
}
]

},
“production”:{
“connector”: [
{“id”: “connector-server-1”, “host”: “127.0.0.1”, “port”: 3150, “clientHost”: “127.0.0.1”, “clientPort”: 3010, “frontend”: true}
],
“gate”:[
{“id”:“gata-server-1”,“host”:“127.0.0.1”,“post”:3350,“clientPort”:3250,“frontend”:true,“aotu-restart”:true}
],
“hall”:[
{“id”:“hall-server-1”,“host”:“127.0.0.1”,“prot”:4200}
],
“versus”:[
{“id”:“sersus-server-1”,“host”:“127.0.0.1”,“port”:4250}
]

}
}

id 字符串类型的服务器
host 应用服务器的域名 或者地址 
port 请求的端口
frontend  bool类型是佛是前段服务器  默认是false

配置 adminServer。json
[{
“type”: “connector”,
“token”: "agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn
},
{
“type”:“chat”,
“token”:"agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn
},
{
“type”:“gate”,
“token”:“agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn”
},
{
“type”:“hall”,
“token”:“agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn”
}
]

5解决服务器分配的问题
冲上面的servers.json 配置的修好可以看出最先来时创建的项目一个服务区相比, connector 和chat 我都配置了一个
这就是要姐姐客服端的请求服务器分配问题 解决思路 用户 访问gate服务器 使用该用户的uid 的省人才2
的校验码 与 connector 服务器的合适取余宠儿得到一个 connector服务器把这个connector服务器分配各请求的用户

在 app的目录先创建util 的目录 在这个目录下创建dispatcher.js 和 routeUtil.js 文件来处理赐福去的分配问题
var crc = require(‘crc’);
module.exports = function () {
return new dispatch();
};
var dispatch = function () {}
dispatch.prototype.dispatch = function(uid, connectors) {
console.log(‘connectors------>seves’,connectors);
console.log(‘uid’,uid);
console.log(‘connectors------>seves’,typeof connectors);
var index = Math.abs(crc.crc32(uid)) % connectors.length;
return connectors[index];
};
routeUtil.js的内容
module.exports = function () {
return new exp();
};

var exp = function () {};
var dispatcher = require('./dispatcher');

exp.prototype.createGame = function(serverName)
{
return function(session, msg, app, cb) {
	let servers = app.getServersByType(serverName);
	if(!servers || servers.length === 0) {
		if(!!cb && typeof cb == 'function')
		{
			cb(new Error('can not find '+ serverName +' servers.'));
		}
		return;
	}
	let openid = session.get('openid');
	let d = new dispatcher();
	let res = d.dispatch(openid, servers);
	cb(null, res.id); 
};

};

准备好这些 在game-server 服务区的如楼文件app.js 中添加配置
var pomelo = require(‘pomelo’);
//创建模块的实例
var app = pomelo.createApp();
//设置名字
app.set(‘name’, ‘text’);
//获取实例
var routeUtil = require(’./app/util/routeUtil’);
var fs = require(‘fs’);

app.configure('production|development', 'connector', function(){

let serverConfig = {
reloadHandlers:true,
reloadRemotes:true
 };
app.set('serverConfig',serverConfig);
app.set('connectorConfig',
	{
  connector : pomelo.connectors.hybridconnector,
  heartbeat : 30,
  /* ssl: {
    type: 'wss',
    key: fs.readFileSync('./key/3027754_xcx.20181206.top.key'),  
    cert: fs.readFileSync('./key/3027754_xcx.20181206.top.pem')
  },  */     
  useDict : true,   
  useProtobuf : true,
  handshake : function(msg, cb){
			cb(null, {});
		}
	});
});
//
app.loadConfig("mysql", app.getBase() + "/config/mysql.json"); 
app.loadConfig("wechat", app.getBase() + "/config/wechat.json"); 
app.loadConfig("breakModel", app.getBase() + "/config/break.json"); 
app.loadConfig("modelTime", app.getBase() + "/config/modelTime.json"); 

app.configure('production|development' ,function () {

var dbclient = require('./app/dao/mysql/mysql').init(app);
  app.set('dbclient', dbclient); 

})
app.configure('production|development', 'gate', function(){
app.set('connectorConfig',
	{
		connector : pomelo.connectors.hybridconnector,
		useProtobuf : true
	});
});

var routeT = new routeUtil();
app.route('hall', 	routeT.createGame('hall')); 
app.route('versus', 	routeT.createGame('versus')); 
var HttpServer = require('./app/gamehttp/httpServer');
var httpServer = new HttpServer(app);
app.set('httpServer', httpServer); 
var roomManager = require('./app/game/roomManager');
var gamescene = require('./app/game/gameid').gamescene;
app.configure('production|development', function () {
const serverType = app.serverType;
if(serverType !== 'master' && serverType !== 'connector')
{
 const scene = gamescene[serverType];
 for(const  key in scene)
{
	  const sbj = scene[key];
 	 let room = new roomManager(sbj.time);
	  app.set(sbj.room,room);
 	 room.timerForOutCard();
 }
 }
})

app.start();

process.on('uncaughtException', function (err) {
console.error(' Caught exception: ' + err.stack);
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值