Pomelo实现最简单的通信-egret。
昨天因为需要开始学习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。的更多相关文章
- 使用Java实现简单串口通信
最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...
- .NET Core微服务之路:利用DotNetty实现一个简单的通信过程
上一篇我们已经全面的介绍过<基于gRPC服务发现与服务治理的方案>,我们先复习一下RPC的调用过程(笔者会在这一节的几篇文章中反复的强调这个过程调用方案),看下图
- (原创)如何使用boost.asio写一个简单的通信程序(一)
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...
- C#串口介绍以及简单串口通信程序设计实现
C#串口介绍以及简单串口通信程序设计实现 周末,没事干,写个简单的串口通信工具,也算是本周末曾来过,废话不多,直接到主题 串口介绍 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口) ...
- Python网络编程02 /基于TCP、UDP协议的socket简单的通信、字符串转bytes类型
Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes类型 目录 Python网络编程02 /基于TCP.UDP协议的socket简单的通信.字符串转bytes ...
- 基于Tcp协议的简单Socket通信实例(JAVA)
好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些网络编程的基础,这里就不提了,只记录最简单易懂实用的东西. ...
- VUE简单组件通信
[x] 1.prop组件通信 1.简单理解 2.多层嵌套 [x] 2.使用ref进行组件通信 [x] 3.$emit组件通信 1.prop组件通信 1.简单理解 有点类似于应式的感觉,我不管你要不要只 ...
- (原创)如何使用boost.asio写一个简单的通信程序(二)
先说下上一篇文章中提到的保持io_service::run不退出的简单办法.因为只要异步事件队列中有事件,io_service::run就会一直阻塞不退出,所以只要保证异步事件队列中一直有事件就行了, ...
- python socket和简单tcp通信实现
python 服务端和客户端的简单交互 TCP服务端: 1 创建套接字,绑定套接字到本地IP与端口 s = socket.socket(socket.AF_INET,socket.SOCK_STREA ...
随机推荐
- excel小技巧-用于测试用例的编号栏:“获取当前单元格的上一格的值+1”=INDIRECT(ADDRESS(ROW()-1,COLUMN()))+1
编写用例的时候使用,经常修改用例的时候会需要增加.删除.修改条目,如果用下拉更新数值的方式会很麻烦. 1.使用ctrl下拉,增删移动用例的时候,需要每次都去拉,万一列表比较长,会很麻烦 2.使用ROW ...
- Shtirlits - SGU 125(搜索)
题目大意:B[i, j]表示周围有多少个比它大的数,能否用B数组构造出一个A数组,如果不能输出“NO SOLUTION”. 分析:数据规模比较小,可以直接暴力枚举每个点的值. 代码如下: #inclu ...
- NewSQL——优化的SQL存储引擎(TokuDB, MemSQL)+?
NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性. NewSQL 是指这样一类新式的关系型数据库 ...
- XML认识
XML概念 XML是eXtensible Markup Langguage 缩写,称之为可扩展标记语言.XML 被设计用来传输和存储数据.与HTML不同的是: HTML被设计用来显示数据,其焦点是数据 ...
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
问题: 当file_get_content()函数的参数 url中是localhost时不能抓取,是127.0.0.1时可以抓取到静态html代码.实现页面静态化技术提高访问效率. test.php ...
- 如何彻底删除SVN中的文件和文件夹(附恢复方法)
在SVN中如果删除某个文件或文件夹也可以在历史记录中进行找回,有的时候需要彻底删除某些文件,即不希望通过历史记录进行恢复,需要在服务器上对SVN的数据进行重新整理 这里假设SVN项目的目录为 /dat ...
- 使用php glob函数查找文件,遍历文件目录(转)
函数说明:array glob ( string $pattern [, int $flags ] )功能:寻找与模式匹配的文件路径,返回包含匹配文件(目录)的数组(注:被检查的文件必须是服务器系统的 ...
- android 34 ListView进阶
public View getView(int position, View convertView, ViewGroup parent) {////convertView是一个缓存,每次返回一个la ...
- linux 调度器配制参数
http://blog.csdn.net/wudongxu/article/details/8574753 参数位置: /proc/sys/kernel/ 编绎内核时参数 [root@monitor ...
- etrace 跟踪程序函数动态执行流程
https://github.com/elcritch/etrace 窗口1: 监控窗口,执行监控程序,显示监控结果 [root@monitor example]# pwd /root/etrace- ...