昨天因为需要开始学习Pomelo 做H5游戏的服务端。

因为个人学习习惯,我从来不适合去跟着文档看。一般我直接是看下大概的API,但是Pomelo的API全部都是英文的。

昨天我就告诉自己用一下午时间去做一个最基本的通信功能的DEMO。

安装NODE.JS  Phython VS 一切就绪之后就开始了。

转到目录下面,输入命令 就会创建一个Pomelo项目 ,之后会要求选择 个人理解就是通信方法把 。

选择好之后就会生成项目目录

目录结构就是这样的。

一开始我以为这样就可以了啊,但是后来发现不对 总感觉少了点什么,应该是基础包吧?||环境包?个人理解就是支持程序跑起来的一些基础类库。

直接运行他,就可以了。

接下来我就瞅这个项目目录结构 ,当然 我值看Game-server web-server没大看 ,不过感觉大致差不大多吧。

先看了下app.js --

app.configure('production|development', 'connector', function(){//其实我不大了解这个方法的具体实现方式,但是我觉得他的功能大概就是设置Connector的连接方式。
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
heartbeat : 3,
useDict : true,
useProtobuf : true
});
});
  connector : pomelo.connectors.hybridconnector,【进去看他的代码】

Pomelo.connectors.__defineGetter__('sioconnector', load.bind(null, './connectors/sioconnector'));

Pomelo.connectors.__defineGetter__('hybridconnector', load.bind(null, './connectors/hybridconnector'));

Pomelo.connectors.__defineGetter__('udpconnector', load.bind(null, './connectors/udpconnector'));
Pomelo.connectors.__defineGetter__('mqttconnector', load.bind(null, './connectors/mqttconnector'));

他设置了几个几个常量咯 根据这个方法选择通信方式。

  设置完这些,然后我就开始琢磨怎么连上我的第一个WebSocket服务器,哪里都不用改直接跑起来看下把 ,先连接上了再说下一步。

  

  其实应该去设置server.json的 里面可以设置 服务端口跟 客户端端口的,但是我直接用项目创建时候默认的把,上面有个clientPort

  那个是客户端连接的端口,连接上去之后

  

我用的是EGRET引擎,所以在论坛里直接找了Pomelo客户端用的包,用上了 ,这样 就连接上去了 。加下来才是终点

最简单的通信,先看下客户端我是这么些的

  

  this.socket.request("connector.entryHandler.join", {//requst(@网友说这叫路由地址,在我看来这个参数就是写Connector(服务器路由?每个路由单独处理属于自己的工作 分工明确提高效率?).文件名(为毛不是类名).方法名--。那个在,@参数,@回调//这个回调 ,不是可以说是通信完成的回调,但也不能说完全就是,因为这个回调干不干活触不触发还要看服务端)
"uid":UID,
"rid":RID ,
"target": TAG
}, function (result) {
console.log(result);
}); }) /**
上面那是客户端调用湖物端的方法,他那写好了 就要在湖物端开始写要触发的方法了 **/
Handler.prototype.join = function (msg, session, next) {
var self = this;                    
console.log(msg.uid);  
var id = msg.uid + "*" + msg.rid;
console.log(id);    msg就是前端发过来的msg var sessionService = self.app.get('sessionService');
next(null, {
code: 500,
error: true
});
return; var chanel = this.ChannelServers.getChannel("pomelo", true); //关键就是这个Chanl啊 chanl就是一个对象,我理解就是一个麻将桌,你给他创建编号 就能王这个麻将桌里面放人进去,嘿嘿 。所有用户触发JOIN的时候都会获取叫“pomelo”的麻将桌,然后把自己加进去 ,后面那个参数就是如果麻将桌还没创建 就创建一个新的
chanel.add(msg.uid, this.app.get('serverId'));//加入Chanel,UID的话 按正常的 应该是绑定sesson的uid 只是我把session-uid放在后面去绑定 所以就,这样就区分了第二个参数 是绑定的是SESSION uid 还是每个玩家app里面那个id ,答案是后者
var rid = msg.rid;
var uid = msg.uid;
msg.sid = msg.rid;
session.bind(uid);
session.set('rid', rid);
session.push('rid', function (err) {
});   发送聊天消息-服务端   
Handler.prototype.Chatto = function (msg, session, next) {
var uid = session.uid;
var sid = session.get("rid");
var uid = session.uid; console.log("uid=" + uid + "--sid=" + sid);
var chanel = this.ChannelServers.getChannel("pomelo", true);
console.log(chanel.records);
next(null, {"msg": "uid=" + uid})
if (chanel.getMember(uid)) {
chanel.pushMessage("back", {"msg": "玩家:" + uid + "-->发布信息"});
}
}} 其实按功能上来说 就是通过Chanel去转发那些个你想要转发出去的信息 ,所以说套路是这样 更复杂的我也还没做过 ,但是复杂的 就是 很多简单的扣在一起换着玩法去写吧。

  

Pomelo实现最简单的通信-egret。的更多相关文章

  1. 使用Java实现简单串口通信

    最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...

  2. .NET Core微服务之路:利用DotNetty实现一个简单的通信过程

    上一篇我们已经全面的介绍过<基于gRPC服务发现与服务治理的方案>,我们先复习一下RPC的调用过程(笔者会在这一节的几篇文章中反复的强调这个过程调用方案),看下图

  3. (原创)如何使用boost.asio写一个简单的通信程序(一)

    boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...

  4. C#串口介绍以及简单串口通信程序设计实现

    C#串口介绍以及简单串口通信程序设计实现 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口) ...

  5. Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型

    Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...

  6. 基于Tcp协议的简单Socket通信实例(JAVA)

    好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...

  7. VUE简单组件通信

    [x] 1.prop组件通信 1.简单理解 2.多层嵌套 [x] 2.使用ref进行组件通信 [x] 3.$emit组件通信 1.prop组件通信 1.简单理解 有点类似于应式的感觉,我不管你要不要只 ...

  8. (原创)如何使用boost.asio写一个简单的通信程序(二)

    先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...

  9. python socket和简单tcp通信实现

    python 服务端和客户端的简单交互 TCP服务端: 1 创建套接字,绑定套接字到本地IP与端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREA ...

随机推荐

  1. Unity 利用Coroutine实现跳动数字效果

    纯粹转载:转载注明参考链接! 参考链接:http://xataxnova.blog.163.com/blog/static/236620063201451061738122/,作者:网易博客 xata ...

  2. Spark(Hive) SQL数据类型使用详解(Python)

    Spark SQL使用时需要有若干“表”的存在,这些“表”可以来自于Hive,也可以来自“临时表”.如果“表”来自于Hive,它的模式(列名.列类型等)在创建时已经确定,一般情况下我们直接通过Spar ...

  3. android获取设备屏幕大小的方法

    // 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay( ...

  4. Unity3d fur真实毛发渲染

    放出效果图 使用的核心技术为曲面细分和置换贴图,Unity支持GPU的曲面细分,置换贴图为噪波,沿着法线拉伸即成为毛发.再随机减少最高点的高度产生毛刺的感觉 曲面细分之前有篇文章详细讲过 弄了前后ri ...

  5. xrdp远程 & watchdog 启用与测试 & WebRTC

    sudo apt-get install xrdp sudo apt-get install vnc4server tightvncserver echo "xfce4-session&qu ...

  6. MFC图形处理

    关于MFC绘图功能入门 创建Dialog based MFC工程    打开Resource view 下的Dialog主界面 添加Picture control控件,为此控件添加CStatic的co ...

  7. 《University Calculus》-chape12-偏导数-基本概念

    偏导数本质上就是一元微分学向多元函数的推广. 关于定义域的开域.闭域的推广: 其实这个定义本质上讲的就是xoy面上阴影区域的最外面的一周,只不过这里用了更加规范的数学语言. 二次函数的图形.层曲线(等 ...

  8. 细谈Java

    重载:相同函数名,不同参数. 重写(覆写):父类和子类之间的,子类重写了父类的方法. java的多态:重载+覆写 1.      Main方法: 是public的,也是static,也是void的,参 ...

  9. Individual Contest #1 and Private Training #1

    第一次的增补赛,也是第一场个人排位赛,讲道理打的和屎一样,手速题卡了好久还WA了好多发,难题又切不出来,这种情况是最尴尬的吧! Individual Contest #1: Ploblem D: 题意 ...

  10. boost------asio库的使用1(Boost程序库完全开发指南)读书笔记

    asio库基于操作系统提供的异步机制,采用前摄器设计模式(Proactor)实现了可移植的异步(或者同步)IO操作,而且并不要求多线程和锁定,有效地避免了多线程编程带来的诸多有害副作用. 目前asio ...