pomelo扩展模式一

为何要讨论这个问题,当初期玩家不多的时候一个后台台可以承载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
这个网站解决了大家开始设计阶段的问题,轻量级的各种设计模型,强烈推荐

你可能感兴趣的:(扩展,pomelo)