pomelo学习笔记

本文是关于Pomelo框架的学习笔记,主要探讨了路由在处理多聊天服务器消息分配的角色,以及Channel服务在推送消息和用户管理中的应用。Session部分介绍了其在前端和后端服务器中作为原生session代理的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

路由

比如有多个聊天服务器,我们需要把消息路由的不同的服务器下处理

/*
msg结构:
{
  namespace: 'sys',
  serverType: 'gate',
  service: 'msgRemote',
  method: 'forwardMessage',
  args: [
    {
      id: 1,
      type: 0,
      compressRoute: 0,
      route: 'gate.gateHandler.getServer',
      body: [Object],
      compressGzip: 0
    },
    {
      id: 1,
      frontendId: 'connector-server-1',
      uid: null,
      settings: {}
    }
  ]
}
*/
function myRoute(session, msg, app, cb) {
    var chatServers = app.getServersByType('chat'); 
    if (!chatServers) {
     	cb(new Error('can not find chat servers.'));
		return;
    }
    cb(null, chatServers[0].id);//把所有的发往chat服务器的消息都发往第一台chat服务器中
};

app.configure('production|development', function(){
	app.route('chat', myRoute);//给chat服务器注册路由
});

channel

用来向用法推送消息的服务

  • 加入channel
remote.add = function(uid, sid, cb){
    var channel = channelService.getChannel('pomelo', true); //得到channel,true在没有的时候创建。
    if(!!channel)
        channel.add(uid, sid);//uid客户id,sid前端服务器id
};
  • 退出channel
handler.kick = function(uid, sid, name){
    var channel = channelService.getChannel(name, false);
    if (!!channel) {
        channel.leave(uid,sid);
    }
};
  • 调用rpc
app.rpc.chat.chatRemote.add(session, uid, app.get('serverId'), function(data){});
  • 推送消息
var channel = channelService.getChannel('pomelo', false);
channel.pushMessage({route:'onChat', msg:'hello'});
  • 客户端监听推送
pomelo.on('onChat', function(data) {});

Session

  • FrontendSession:前端服务器处理函数中的session,原生session的前端代理。
session{
	id //session的id,全局唯一
	uid //可以绑定一个uid
	frontendId //维护这个session的服务器id
	settings //key-value表

	bind(uid, cb) //把uid绑定到session上
	unbind(uid, cb) 
	set(key, value)//设置值
	get(key)//取值
	push(key, cb)//cb(err)把设置的值同步到原生session中
	pushAll(cb)
	on(eventName, cb)
}
  • BackendSession:后端服务器处理函数中的session,原生session的后端代理。
session{
	id //session的id,全局唯一
	uid //可以绑定一个uid
	frontendId //维护这个session的服务器id
	settings //key-value表

	bind(uid, cb) //把uid绑定到session上
	unbind(uid, cb) 
	set(key, value)//设置值
	get(key)//取值
	push(key, cb)//cb(err)把设置的值同步到原生session中
	pushAll(cb)
	on(eventName, cb)
}

Channel

channel{
	add(uid, sid)//uid用户id,sid前端服务器id
	leave(uid, sid)//
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值