读pomelo的教程-2
下面从头到尾记录chat demo的Login的过程
- client:点击login按钮,取得username和rid两个值
$("#login").click(function() {
 username = $("#loginUser").attr("value");
 rid = $('#channelList').val();之后对username和rid验证 
- client:连接gate服务器
pomelo.init({
 host: host,
 port: port,
 log: true
 }请求路由 'gate.gateHandler.queryEntry'。 pomelo.request(route, {
 uid: uid
 }
- 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 
- client:连接connector服务器
var route = "connector.entryHandler.enter"; 
 pomelo.request(route, {
 username: username,
 rid: rid
 }
- 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服务器 
- 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的更多相关文章
- 读pomelo的教程-1
		pomelo教程的例子是一个聊天室,包括一个webserver客户端,和一个gameserver的pomelo服务器.这个例子挺好,一个聊天系统逻辑简单,还包括了用户管理,客户端request,服务器 ... 
- 读w3c中文教程对键盘事件解释的感想 -遁地龙卷风
		写这篇博文源于w3c中文教程对键盘事件的解释, onkeydown 某个键盘按键被按下 onkeypress 某个键盘按键被按下并松开 onkeyup 某个键盘按键被松开 可在实践中发现 只注册key ... 
- 笔记-读官方Git教程(2)~安装与配置
		小书匠 版本管理 教程内容基本来自git官方教程,认真都了系列的文章,然后对一些重点的记录下来,做了简单的归纳并写上自己的思考. 1.安装 在基于 Debian 的发行版上,使用 apt-get安装 ... 
- 笔记-读官方Git教程(1)~认识Git
		小书匠版本管理 教程内容基本来自git官方教程,认真都了系列的文章,然后对一些重点的记录下来,做了简单的归纳并写上自己的思考. 目录: 1.Git介绍 2.Git版本控制原理 3.Git特点 4.Gi ... 
- python中global的用法——再读python简明教程
		今天看了知乎@萧井陌的编程入门指南,想重温一下 <python简明教程>,对global的用法一直不太熟练,在此熟练一下,并实践一下python中list.tuple.set作为参数的区别 ... 
- 读C#图解教程的笔记
		第一章记录: 格式化字符串 Console.WriteLine("{0:D}", 123456789);//表示十进制字符串 Console.WriteLine("{0: ... 
- [未读]angularjs权威教程
		正在啃,赶脚不错... 
- Mysql读写锁保姆级图文教程
		摘要:读锁会阻塞写,但是不会阻塞读,而写锁会把杜希俄都阻塞. 本文分享自华为云社区<Mysql保姆级读写锁图文教程丨[绽放吧!数据库]>,作者:Code皮皮虾 . 准备 创建mylock表 ... 
- NeHe OpenGL教程 第一课:OpenGL窗口
		转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ... 
随机推荐
- BZOJ 3720 gty的妹子树
			块状树裸题 块状树: 首先对树进行分块,分出的每一块都是一个连通块 通常的分块的方式如下: 1.父亲所在块不满,分到父亲所在块中 2.父亲所在块满,自己单独开一个块 (貌似有更为优越的分块方式? 注意 ... 
- 从一点儿不会开始——Unity3D游戏开发学习(一)
			一些废话 我是一个windows phone.windows 8的忠实粉丝,也是一个开发者,开发数个windows phone应用和两个windows 8应用.对开发游戏一直抱有强烈兴趣和愿望,但奈何 ... 
- 【原创】中文分词系统 ICTCLAS2015 的JAVA封装和多线程执行(附代码)
			本文针对的问题是 ICTCLAS2015 的多线程分词,为了实现多线程做了简单的JAVA封装.如果有需要可以自行进一步封装其它接口. 首先ICTCLAS2015的传送门(http://ictclas. ... 
- hadoop2 环境的搭建(手动HA)
			1.手工切换ha的环境的搭建(比hadoop1多出来journalnode的配置) namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113. ... 
- VS2012界面改为英文
			需要下载一个语言包 http://www.microsoft.com/en-us/download/confirmation.aspx?id=30681 还是不要指望这个,简直坑爹. 我把所有中文版的 ... 
- eclipse导入javax.servlet.*的方法
			1.下载web应用服务器tomact,网址http://tomcat.apache.org/download-80.cgi 这个根据自己系统进行选择. 2.将其加压到电脑中 3.在eclipse中添加 ... 
- 发布mvc3的项目时system.web.mvc 版本 为3.0.0.1高于服务器版本3.0.0.0  升级到3.0.0.1
			下载地址在这里: http://www.microsoft.com/zh-cn/download/details.aspx?id=44533&WT.mc_id=rss_alldownloads ... 
- build path功能详解
			在项目上右键>Build path>Config build path “web project”中,一般把"src"设置为source folder,把WEB-INF ... 
- inline-block和text-indent在IE6,IE7下同时使用的兼容问题解决方法
			在实际应用中,考虑到seo,很多button,icon都要用到inline-block和text-indent来处理,例如: <a href="#">Button< ... 
- BZOJ1048: [HAOI2007]分割矩阵
			题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1048 题解:搞清题意之后来个记忆化爆搜就行了. 代码: #include<cstdio& ... 
