您的位置:首页 > 其它

pomelo扩展模式一

2016-03-04 14:32 260 查看
为何要讨论这个问题,当初期玩家不多的时候一个后台台可以承载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

[code] {"id":"chat-server-1", "host":"127.0.0.1", "port":6050},
 {"id":"chat-server-2", "host":"127.0.0.1", "port":6051},


app.js

增加对于增加的后台的支持

[code]// 定义路由函数来把玩家路由到指定的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

这个网站解决了大家开始设计阶段的问题,轻量级的各种设计模型,强烈推荐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: