读pomelo的教程-2

下面从头到尾记录chat demo的Login的过程

      1. client:点击login按钮,取得username和rid两个值

        $("#login").click(function() {
                username = $("#loginUser").attr("value");
                rid = $(‘#channelList‘).val();

        之后对username和rid验证

      2. client:连接gate服务器

        pomelo.init({
                        host: host,
                        port: port,
                        log: true
                    }

        请求路由 ‘gate.gateHandler.queryEntry‘。

        pomelo.request(route, {
                    uid: uid
                }
      3. server:gate服务器

        handler.queryEntry = function(msg, session, next) {
            var uid = msg.uid;
            if(!uid) {
                next(null, {
                    code: 500
                });
                return;
            }
            // get all connectors
            var connectors = this.app.getServersByType(‘connector‘);
            if(!connectors || connectors.length === 0) {
                next(null, {
                    code: 500
                });
                return;
            }
            // select connector
            var res = dispatcher.dispatch(uid, connectors);
            next(null, {
                code: 200,
                host: res.host,
                port: res.clientPort
            });
        };

        主要就是分配一个connector服务器,返回它的host和port

      4. client:连接connector服务器

        var route = "connector.entryHandler.enter";
                        pomelo.request(route, {
                            username: username,
                            rid: rid
                        }
      5. server:connector服务器

        handler.enter = function(msg, session, next) {
            var self = this;
            var rid = msg.rid;
            var uid = msg.username + ‘*‘ + rid
            var sessionService = self.app.get(‘sessionService‘);
        
            console.log("rid="+rid +" uid="+uid);
            //duplicate log in
            if( !! sessionService.getByUid(uid)) {
                next(null, {
                    code: 500,
                    error: true
                });
                return;
            }
        
            session.bind(uid);
            session.set(‘rid‘, rid);
            session.push(‘rid‘, function(err) {
                if(err) {
                    console.error(‘set rid for session service failed! error is : %j‘, err.stack);
                }
            });
            session.on(‘closed‘, onUserLeave.bind(null, self.app));
        
            //put user into channel
            self.app.rpc.chat.chatRemote.add(session, uid, self.app.get(‘serverId‘), rid, true, function(users){
                next(null, {
                    users:users
                });
            });
        };

        检测一下是否重复登陆了,把session与uid绑定,在setting里设置rid,注意需要push,session设置回调“closed”,rpc调用chat服务器

      6. server:chat服务器添加用户

        ChatRemote.prototype.add = function(uid, sid, name, flag, cb) {
            var channel = this.channelService.getChannel(name, flag);
            var username = uid.split(‘*‘)[0];
            var param = {
                route: ‘onAdd‘,
                user: username
            };
            channel.pushMessage(param);
        
            if( !! channel) {
                channel.add(uid, sid);
            }
        
            cb(this.get(name, flag));
        };

        这里的uid是“uid*rid”, sid是server id,name是rid,flag是true。向channel中所有用户发送onaAdd信息,再把uid加入channel

读pomelo的教程-2,布布扣,bubuko.com

时间: 2024-08-24 12:14:51

读pomelo的教程-2的相关文章

读 AppleScript 简单教程 【下载】

http://download.csdn.net/detail/wide288/8338425 读 AppleScript 简单教程 记的笔记,把代码加高亮了.重新抓的图,osx 10.10 系统下. 文件格式是 page 的. 上面的网址可以下载.

微信公众账号开发教程

微信公众账号开发教程 一.第1篇-引言 本文转载来自柳峰老师的博客,在这里非常感谢柳峰老师的分享和贡献! 内容方面,大概会涉及到: 1)前沿知识:微信公众帐号的分类.两种模式各自的特点和区别.开发模式的配置使用等: 2)API中各类消息的使用(我已经对api进行封装并打成了jar包,到时候会考虑分享出来): 3)微信公众帐号开发中的小技巧(如换行.通过代码发送表情.屏幕飘雪花.表情的接收识别.在Android和iOS上表现不一致等等): 4)与业务系统对接的方法(链接.短信等,除了技术讲解还会做

技术晨读积累_20140526

#技术晨读# 初探单点登录 SSO 在多个应用中,如果你登录了其中一个应用,就可以登录其他应用了,这样的技术就是SSO(单点登录).步骤大概是母站上种一个cookie,当访问子站的时候,带cookie发起一次对母站的请求,母站认证后,带上认证信息产生重定向到子站的页面,进行cookie写入操作... http://daoluan.net/blog/single-sign-on #技术晨读# PHP API中,MYSQL与MYSQLI的持久连接区别 php与mysql的连接分为持久连接和短连接,作

选择学习Pomelo

我之前的项目都是基于http做网络通信,但是做多玩家同时对战的游戏,http短连接不支持服务器的push是个问题,这样客户端就没办法收到服务器的消息. 最简单的方法是定时发起request询问服务器,显然效率和流量是个问题.还有Comet方法,即服务器保持连接直到有数据可用才返回. 网上搜了一下comet,看到评论说这个方法也效率不是很高. HTML5支持websocket之后好像socket连接是一个又高效又简单的方法.客户端用socket.io比较简单,服务器要找一个引擎,简单易用为前提,最

每日晨读_20140705

#技术晨读# 分布式缓存的一起问题 数据一致性一直是分布式缓存最需要考虑的问题,文章的这起问题场景就是master缓存集群出现了单点故障,有什么方案能避免切换导致的数据一致性的问题. http://timyang.net/data/cache-failure/   #技术晨读# 一次成功的漫游京东内部网络的过程 题目很唬人,实际就是一个开发把邮箱密码放到了github上,导致了后续的一系列被爆...oh~no~~... http://www.wooyun.org/bugs/wooyun-2014

(转)十分经典的批处理教程

本文转载自http://www.5dmail.net/html/2005-10-17/20051017181702.htm 这是一篇技术教程,真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人.一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前..      先概述一下批处理是

批处理经典入门教程!(从不懂到高手)

写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法 脚本之家补充说明:批处理相对来说是比较简单的语言,大家可以通过多写多看别人的实例来学习,不懂的百度一下. 这是一篇技术教程, 真心诚意会用很简单的文字表达清楚自己的意思,只要你识字就能看懂,就能学到知识.写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可 以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人.一杯茗茶,你会发现

关于学习的一点感悟

首先声明一下:这里的学习并不特指软件学习,是我工作学习中得到的一些感悟. 人不可能理解他没接触过的事物 学习的时候,如果只是枯燥的文字,复杂的公式的话,一些很好的书籍或者只是便成为了催眠良药.知识如果只是一些天外来客一样的存在,直接空降下来,我们如何去理解他呢?我们只能用现有的只是和经验去类比的学习这些知识,或者在日久天长的接触过程中去渐渐学习知识.很显然,前者比后者来的快的多. 如果一样东西,我无从类比,也不能接触.那么穷我有生之年我也不会理解它. 理论知识如何学习? 理论知识通常都是无数先辈

批处理基本知识以及进阶 V2.0

批处理基本知识以及进阶 将以要执行的程序指令 , 像在 dos 模式下一下写入记事本 , 保存成 bat 文件 , 就可以执行了 一 . 简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求回显功能,或显示消息.如果没有任何参数, echo 命令将显示当前回显设置. 语法 : echo [{on │ off}] [message] Sample : @echo off / echo hello world 在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用 > >>