昨天因为需要开始学习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. BLE开发的各种坑

    这段时间在做低功耗蓝牙(BLE)应用的开发(并不涉及蓝牙协议栈).总体感觉 Android BLE 还是不太稳定,开发起来也是各种痛苦.这里记录一些杂项和开发中遇到的问题及其解决方法,避免大家踩坑.本 ...

  2. 51Testing丛书新作《软件测试工程师面试秘籍》

    51Testing又有好消息告诉小伙伴了!51Testing软件测试网作品系列重磅推出全新丛书<软件测试工程师面试秘籍> 此次我们邀请到知名互联网企业测试专家李江(G.li),整理并撰写软 ...

  3. Selenium 脚本稳定性问题

    运行一个星期前升至更久前的脚本,,,出现如下错误提示 elementNotVisibleException was unhandled by user code. 经过询问大侠,说我的脚本不够健全,也 ...

  4. 【Javascript&Jquery基础归纳】- 加载相关

    1.window.onload 必须等到Dom所有元素.包括图片加载完毕后加载,只能编写一个. 2.$(document).ready()      DOM结构加载完毕后马上执行,并且可以编写多个. ...

  5. 计算1到n整数中,字符ch出现的次数

    个位ch个数 + 十位ch个数 * 10 + 百位ch个数 * 100:同时如果某一位刚好等于ch,还需要减去多算的一部分值. #include <stdio.h> //整数1到n,字符c ...

  6. linux —— 编译linux内核

    目录:     0.测试环境 1.获得最新内核源代码  2.编译源代码 3.运行新的内核 0.测试环境: 我的系统 : ubuntu 16.04 LTS (内核版本:4.4.0-36-generic ...

  7. 【Android - 框架】之Fresco的使用

    当下有很多图片加载框架,常见的有Glide.Fresco.Picasso等.Glide因为其体积小.缓存机制强大等优点,受到了广大程序员的青睐:Fresco虽然体积比较大,缓存机制也没有Glide强大 ...

  8. Winform 中 DesignMode 返回值不正确的问题。

    本文转载:http://blog.csdn.net/sabty/article/details/5325260 以前也曾遇到这样的问题,不过影响不大也没有去详细了解.今天又重新遇到此问题,实在太不便. ...

  9. 如何优化cocos2d程序的内存使用和程序大小:第二部分_(转)

    减少你的程序的大小 把纹理的颜色位深度减少到16位,不仅可以减少内存压力,还可以有效地减少程序的体积.但是,我们还有其它方法可以更进一步地减少程序的大小. TexturePacker PNG 图片优化 ...

  10. 应用层协议实现系列(一)——HTTPserver之仿nginx多进程和多路IO的实现

    近期在尝试自己写一个Httpserver,在粗略研究了nginx的代码之后,决定仿照nginx中的部分设计自己实现一个高并发的HTTPserver,在这里分享给大家. 眼下使用的较多的Httpserv ...