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 ...
随机推荐
- BZOJ3715: [PA2014]Lustra
3715: [PA2014]Lustra Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 237 Solved: 149[Submit][Status ...
- 进程创建函数fork()、vfork() ,以及excel()函数
一.进程的创建步骤以及创建函数的介绍 1.使用fork()或者vfork()函数创建新的进程 2.条用exec函数族修改创建的进程.使用fork()创建出来的进程是当前进程的完全复制,然而我们创建进程 ...
- loadrunner打不开ie&ie默认浏览器设置方法
loadrunner使用过程中频繁的出现问题,出现次数最多的就是lr打不开ie,或者ie一闪就关闭了,问题出在我默认浏览器的设置上,因为我原先并没有成功设置ie为默认浏览器.这是一个无意识的错误,我以 ...
- leetcode First Missing Positive hashset简单应用
public class Solution { public int firstMissingPositive(int[] A) { HashSet<Integer> hash=new H ...
- 《University Calculus》-chape8-无穷序列和无穷级数-基本极限恒等式
基于基本的极限分析方法(诸多的无穷小以及洛必达法则),我们能够得到推导出一些表面上看不是那么显然的式子,这些极限恒等式往往会在其他的推导过程中用到,其中一个例子就是概率论中的极限定理那部分知识.
- Kong for Enterprise | Kong - Open-Source API and Microservice Management Layer
Kong for Enterprise | Kong - Open-Source API and Microservice Management Layer undefined
- (组合数学3.1.1.1)POJ 1146 ID Codes(字典序法)
/* * POJ_1146.cpp * * Created on: 2013年10月8日 * Author: Administrator */ #include <iostream> #i ...
- IOS学习之路十五(UIView 添加背景图片以及加边框)
怎样给UIview添加背景图片呢很简单,就是先给view添加一个subview,然后设为背景图片: 效果图如下: 很简单直接上代码: //设置内容 self.myTopView.backgroundC ...
- iOS 应用程序本地化
由于iPhone,iPad等苹果产品在全世界范围内的广泛流行,那么通过App Store下载应用程序的用户也将是来自世界范围的人们,所以开发者在开发过程中势必要考虑到不同语言环境下用户使用,好在iOS ...
- 遇到奇怪的C#/C/C++或者Java的bug可以去问问Coverity
Coverity7月16号在博客Ask The Bug Guys中说以后遇到奇怪的C#/C/C++或者Java的bug可以给TheBugGuys@coverity.com发邮件.然后这些问题就会到一些 ...