为何要讨论这个问题,当初期玩家不多的时候一个后台台可以承载N个人(假设N=100),但是随着人越来越多,那么这个前台就承载不了了,比如第N+1人进来时候如何处理呢?
这个时候就需要增加服务来支持了。
以下以聊天室为基础,进行探索。
首先当后台不够的时候(chatroom),我们需要增加一个后台,如下图所示
我们的想法自然是bk1上的玩家可以和bk2上的玩家进行通讯,实际上这样做行不能,bk1上的玩家只能和bk1上的玩家进行通讯,bk2上的玩家与bk1上的玩家是隔开的。即使是通过同一个cs也不行。这种情可以考虑单独扩容,比如人数从100人支持到200人,假设cs能承载的情况下,需要增加一个后台bk2服务,但在bk2上的玩家是无法与bk1上的玩家直接通讯的,人数却可以提升到2N,如果cs够的话,可以增加n个bk服务。以支持更多的玩家,这就好比QQ聊天室里的房间,房间1,房间2,的玩家无法直接对话。但是却可以开好多房间,前台可以分类,如pomelo讨论组,nodejs讨论组,每个组下分房间1…房间n。
实验代码如下:
server.json
增加一个chat-server
{"id":"chat-server-1", "host":"127.0.0.1", "port":6050},
{"id":"chat-server-2", "host":"127.0.0.1", "port":6051},
app.js
增加对于增加的后台的支持
// 定义路由函数来把玩家路由到指定的bk上
var chatRoute = function(session, msg, app, cb) {
var chatServers = app.getServersByType('chat');
if(!chatServers || chatServers.length === 0) {
cb(new Error('can not find chat servers.'));
return;
}
if(!session){
cb(null, chatServers[0].id);
return;
}
//put user into channel
var res = Util.dispath(session.get('rid'), chatServers);
cb(null, res.id);
};
app.route('chat', chatRoute);
这样子的话玩家分被平均分配到每个bk上,这样就实现了独立房间的扩展!是不是很酷!
https://www.processon.com/i/568c6ea4e4b0e51d149a085f
这个网站解决了大家开始设计阶段的问题,轻量级的各种设计模型,强烈推荐