lordofpomeloo 和 firefly 哪个用的人比较多

当前访客身份:游客 [
当前位置:
Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采用Python编写,基于框架开发。它包括了开发框架和数据库缓存服务等各种游戏服务器基础服务,节省大量游戏开发的工作时间,真正做到让使用者把精力放在游戏玩法逻辑上。用它可以搭建自定义的分布式架构,只需要修改相应的配置文件即可。
采用单线程多进程架构,支持自定义的分布式架构;
方便的服务器扩展机制,可快速扩展服务器类型和数量;
与客户端采用TCP长连接,无需考虑粘包等问题;
封装数据缓存服务;
可实现实时热更新数据以及游戏逻辑,客户端玩家无感觉;
有几十个基础游戏玩法系统模块提供组装使用(v1.3.0提供);
management, firefly 是个多进程、分布式的游戏服务器。因此各游戏server(进程)的管理和扩展是firefly很重要的部分,框架通过抽象使服务器的扩展非常容易。
Network,客户端连接通信、server进程间的通信等构成了整个游戏框架的脉络,所有游戏流程都构建在这个脉络上。与客户端的通信采用的是请求/回应式的,所以受到的客户端的请求,服务端都会给出相应的回应,服务端也能主动的推送,广播给客户端消息。这些请求是基于指令号的请求。(例如定义101为登陆指令)server进程之间的通信时采用的异步回调的方式,这样就减少了的进程间通过网络通信中的时间消耗。
Data, 数据处理是网游的重要部分。在网游有大量的数据需要存储,需要更新,这使得数据库的读写效率成为服务器的最大的性能瓶颈。firefly的db处理能够将数据库表中的数据缓存到memcache中并能以对象的形式进行调用相应的对象方法对数据进行操作。可以在不同的进程中通过实例化相同的名称的缓存实例,得到同步的数据。并能将缓存对象中的数据写回数据库中。 框架思路
一个最基本的服务器就是一个在不停运行着的应用程序。在分布式游戏服务器中,我们需要的服务器具有的功能有,监听客户端的连接,监听其他服务进程的消息,连接其他的服务进程,有些需要有数据库连接和缓存服务。如下图
net connect 做客户端连接,root监听其他服务进程消息,node连接其他服务进程,db数据库,cache缓存。是否需要监听客户端连接,是否监听其他服务进程消息等这是都是可以在config.json中进行配置。包括各个服务器的名称以及各个服务器之间的连接关系。这样就可以自定义出自己的分布式架构。
Firefly团队:我们或有不足,但我们不停努力!
Firefly最新更新资讯,共18条&&(,)
33评/6674阅
6评/3368阅
33评/5639阅
9评/3969阅
6评/1517阅
授权协议:
开发语言:
操作系统:
收录时间:
-& 日&&(国产软件 or 国人参与)
丫头潘潘 发表于1年前
,最后回答(4周前):
大鸡蛋 发表于4个月前
,最后回答(1个月前):
大鸡蛋 发表于1年前
,最后回答(4个月前):
bot911 发表于10个月前
,最后回答(4个月前):
beadle 发表于6个月前
天王盖地虎 发表于10个月前
大鸡蛋 发表于2年前
,最后回答(11个月前):
lunweifeng 发表于12个月前
jiumiao 发表于1年前
,最后回答(1年前):
jiumiao 发表于2年前
,最后回答(2年前):
大鸡蛋 发表于2年前
,最后回答(2年前):
jiumiao 发表于2年前
jiumiao 发表于2年前
jiumiao3 发表于2年前
jiumiao3 发表于2年前
jiumiao3 发表于2年前
jiumiao3 发表于2年前
jiumiao 发表于2年前
,最后回答(2年前):
jiumiao 发表于2年前
大鸡蛋 发表于2年前
,最后回答(2年前):
:介绍感觉很不错,先关注着看看
:不是飞火,是萤火虫:)
:这产品中文名字叫啥,飞火OR火飞?
:漂亮,看看代码先。
共有 193 个类似软件
Cocos2D-X是全球知名的开源跨平台游戏引擎,易学易用,目前已经支持iOS、Android、...
pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为...
cocos2d 是一个 Python 用来开发 2D 游戏和其他图形化交互应用的框架。 主要特性 ...
HGE是一个完全免费的,并且开源的2D游戏引擎,底层采用Direct3D HGE 的架构:...
Wagic 是一个自制的 C++ 纸牌游戏引擎,支持的平台包括:Android (手机和平板), th...
LimeJS 是一个 JavaScript 游戏开发框架,允许开发者创建基于 HTML5 的游戏,支持主...
melonJS 是我们过去实验的结果,是一个开放、自由而且使用简单的HTML网页游戏开发包...
Cyclone2D (飓风软件)是集成的手机游戏设计工具以及开源的引擎,工具提供了强大的动...
Xith3D是高性能的Java 3D引擎,主要面向3D游戏,数据可视化,三维场景原型等。 最突...
Godot是一个全新开发的游戏引擎,其功能集类似知名的跨平台游戏引擎Unity,可用于开...
Firefly是一个高性能一站式Java开发框架,它能帮助开发者快速高效的开发web应用、协...
共有 463 人关注 Firefly当前访客身份:游客 [
当前位置:
pomelo 是由网易开发的基于开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。
Pomelo的应用范围
pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以用如此少的代码达到强大的扩展性和伸缩性。当然还不仅仅是游戏,很多人断言未来的web时代是实时web应用的时代, 我们发现用pomelo开发高实时web应用也如此合适, 而且伸缩性比其它框架好。目前不推荐将pomelo用于大型的MMO rpg游戏开发,尤其是3d游戏, 还是需要象bigworld这样的商用引擎来支撑。
Pomelo的理念
pomelo的第一个理念是让游戏(高实时web应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟rails是很类似的;第二个理念是重视性能和可伸缩性,用户用pomelo开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行;第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件component、路由规则、甚至管理控制台都可以完全由第三方扩展。
Pomelo的框架组成
pomelo包括三部分:
框架, pomelo的核心, 与以往单进程的游戏框架不同, 它是高性能、分布式的游戏服务器框架,并且使用很简单
库, 包括了开发游戏的常用工具库, 如人工智能(ai), 寻路, aoi等
工具包, 包括管理控制台, 命令行工具, 压力测试工具等
pomelo特性
快速、易上手的游戏开发模型和api
高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略
方便的服务器扩展机制,可快速扩展服务器类型和数量
方便的请求、响应、广播、服务器通讯机制, 无需任何配置
注重性能,在性能、可伸缩性上做了大量的测试、优化
提供了较多扩展组件,包括游戏开发常用的库和工具包
提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考
基于开发,支持支持的多种语言客户端
为什么使用pomelo?
高并发、高实时的游戏服务器的开发是很复杂的工作。跟web应用一样, 一个好的开源容器或开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开发领域一直没有太好的开源解决方案。 pomelo将填补这个空白, 打造一款完全开源的高性能(并发)游戏服务器框架。 pomelo的优势有以下几点:
架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js的网络io优势提供了高可伸缩性。
使用非常容易, 开发模型与web应用的开发类似,基于convention over configuration的理念, 几乎零配置, api的设计也很精简, 很容易上手。
框架的松耦合和可扩展性好, 遵循node.js微模块的原则, framework本身只有很少的代码,所有component、库、工具都可以用npm module的形式扩展进来。任何第三方都可以根据自己的需要开发自定义module。
提供完整的开源MMO游戏demo参考(基于HTML 5)。 一个超过1万行代码的游戏demo,使开发者可以随时借鉴demo的设计与开发思路。
在线演示:
Pomelo最新更新资讯,共12条&&(,)
9评/2541阅
5评/5786阅
0评/3020阅
3评/2065阅
74评/10914阅
授权协议:
开发语言:
操作系统:
收录时间:
-& 日&&(国产软件 or 国人参与)
Pomelo 的类似软件:.NET,共6个
Scut游戏服务器引擎使用C#语言开发,特别适用于手机网络游戏,支持使用Python脚本进行游戏开发;支持MSSQL/Mysql数据库;支持HTTP/Socket协议同时接入;采用实体类对象建模,自动构造数据库表结构生成和修改语句;...
最新新闻:
CocosSharp 是一个用 C# 来开发跨平台 2D 游戏的游戏开发包。如果你熟悉 Cocos2D 的话,那么你会很快上手 CocosSharp,API 的设计遵循 C# 和 .NET 规范。 示例程序:/mono/cocos-sharp-samples...
最新新闻:
一个基于DX9和FMOD,采用COM组件方式架构的2D游戏引擎。整个RUGE引擎由六个COM组件(程序框架、渲染系统、音频系统、输入系统、随机数 发生器、计时器)和一个渲染辅助类库(包括精灵、精灵动画、粒子系统、场景管...
MonoGame是一个 Microsoft XNA 4 Framework 的开源跨平台实现。 目标是让为
Xbox 360, Windows & Windows Phone上开发的XNA游戏移植到
iOS, Android, Mac OS X, Linux 以及 Windows 8 Metro上。OUYA以及PlayS...
Farseer物理引擎运行于XNA框架,基于Box2D并有着更多功能的一个基于现实物理的碰撞检测系统,意味着你能使用这个引擎或者辅助工具更方便的创建游戏或者机器人模拟程序。使用Farseer 物理引擎可以轻松让一个简单的...
CryMono - 将 .NET 的功能带入到 CryENGINE3, 让开发人员以更快,更直观的方式去编写游戏逻辑脚本!
:pomelo 0.5 版本火爆发布啦
:pomelo 常见问题集,基于github issue
:终于把,基于pomelo 的push server demo完善完了....
:Pomelo第四篇笔记
:网易开源项目
,还有吗?
共有 193 个类似软件
Cocos2D-X是全球知名的开源跨平台游戏引擎,易学易用,目前已经支持iOS、Android、...
cocos2d 是一个 Python 用来开发 2D 游戏和其他图形化交互应用的框架。 主要特性 ...
Firefly是免费、开源、稳定、快速扩展、能 “热更新”的分布式游戏服务器端框架,采...
HGE是一个完全免费的,并且开源的2D游戏引擎,底层采用Direct3D HGE 的架构:...
Wagic 是一个自制的 C++ 纸牌游戏引擎,支持的平台包括:Android (手机和平板), th...
LimeJS 是一个 JavaScript 游戏开发框架,允许开发者创建基于 HTML5 的游戏,支持主...
melonJS 是我们过去实验的结果,是一个开放、自由而且使用简单的HTML网页游戏开发包...
Cyclone2D (飓风软件)是集成的手机游戏设计工具以及开源的引擎,工具提供了强大的动...
Xith3D是高性能的Java 3D引擎,主要面向3D游戏,数据可视化,三维场景原型等。 最突...
Godot是一个全新开发的游戏引擎,其功能集类似知名的跨平台游戏引擎Unity,可用于开...
pomelo-citrus是一个使用Ruby编程语言开发的开源游戏服务器框架,其软件架构和设计...
pomelo-cli 是 Pomelo 维护的命令行库。
pomelo-unityclient-socket 是 Pomelo 的 .NET 客户端,支持 Pomelo 0.3和新的交流...
pomelo-cocos2d-js 是 Pomelo 的 Cocos2d-js 客户端。 var pomelo = window.po...
pomelo mqtt connector (pomelo mqtt connector) 基于 MQTT,TCP 和 WS 协议。 使用...
共有 555 人关注 Pomelo当前访客身份:游客 [
当前位置:
网易开源游戏服务器框架 pomelo 发布 0.6 版
pomelo 0.6是一次很大的升级, 是自0.3版以来最重要的一次升级
在Pomelo 0.6版本中,对pomelo部分结构进行了调整,将原有的globalChannel组件和master高可用组件从框架中移出,以一种插件的形式提供给用户,具体可以参考[pomelo-globalchannel-plugin](/NetEase/pomelo-globalchannel-plugin), [pomelo-masterha-plugin](/NetEase/pomelo-masterha-plugin);同时在新版本中提供了一个交互式命令行工具,相比之前的命令行工具,使用更为方便、安全,对于项目的运维会更加方便;另外为了进一步提高pomelo的安全性,在0.6版本中引入了数据的签名验证,同时对hybridconnector的非法连接进行了相关处理;其它新的特性还包括详细的rpc debug日志和前端服务器的基本过载保护功能。 ##交互式命令行 为了方便开发者更好的对使用pomelo开发的服务进行运维,在新版本中提供了交互式命令行工具,具体情况可以参考[pomelo-cli](/NetEase/pomelo-cli) & ##plugin机制 为了方便开发者根据自身的需求对pomelo原有的功能进行有效的扩展,在新版本中提供了插件机制的功能,同时将之前版本中的globalChannel和master服务器高可用部分以plugin的形式提供,具体情况可以参考 [pomelo plugin](/NetEase/pomelo/wiki/plugin%E6%96%87%E6%A1%A3)。 ##连接加密 在pomelo 0.6版本中,对hybridconnector增加了数据签名的功能。客户端首先产生rsa的密钥对,客户端保留rsa私钥,在握手阶段客户端将公钥发到服务端;在发送消息阶段,客户端使用私钥对消息进行签名,客户端将消息和签名一起发送到服务端,服务端进行签名验证,如果验证成功后面的流程继续,如果验证失败则该数据包则不进行处理。具体流程可以参考下图:
![rsa](/resource/documentImage/rsa.png)
###使用方法 在客户端连接的过程中增加encrypt:true,在服务端app.js中配置useCrypt,具体代码参考:
客户端 ```javascript``` pomelo.init({ &host:'127.0.0.1', &port:3014, &encrypt:true }, function() { // do something connected }); ```
服务端 ```javascript``` app.set('connectorConfig', { &connector: pomelo.connectors.hybridconnector, &heartbeat: 3, &useDict: true, &useProtobuf: true, &useCrypto: true }); ```
##非法连接处理 在pomelo中sioconnector是基于socket.io,socket.io本身是有对非socket.io的连接进行处理的。对于hybridconnector,底层是基于socket的,在pomelo 0.6版本中增加了对不符合规定协议的连接进行拒绝处理。主要包括两个部分:1.对空连接进行了超时处理;2.对不符合协议规范的连接进行拒绝处理。 ##rpc debug日志 根据网友的建议,在pomelo 0.6版本中增加了更多的rpc日志。开发者只需要在app.js中使用app.enable('rpcDebugLog')即可,另外需要在game-server/config/servers.json中配置category为rpc-debug的appender,具体配置可以参考如下代码:
```json``` { &"type": "file", &"filename": "./logs/rpc-debug-${opts:serverId}.log", &"maxLogSize": 1048576, &"layout": { & "type": "basic" &}, &"backups":5, &"category": "rpc-debug" } ```
##过载保护 在pomelo之前的版本中有toobusy模块对服务器进行过载保护,在新版本中增加了一个对connector连接数的限制功能,开发者只需要在servers.json中对不同的connector进行最大连接数量的配置,当connector超过配置的最大数量,服务器会拒绝连接。配置可以参考如下代码:
```json``` {"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "clientPort":3050, "frontend":true, "max-connections": 100} ```
##服务器断网重连机制 在之前pomelo的版本中,在分布式环境下,存在服务器(非master)网络短时间断开,然后网络恢复后服务无法恢复的情况。在pomelo 0.6版本中,如果服务器(非master)短时间断开,网络恢复后服务器可以正常工作。
##Daemon启动模式 pomelo-daemon提供对pomelo服务进行分布式环境下的启动以及rpc debug日志的收集 & 详细情况请看 [pomelo-daemon](/NetEase/pomelo-daemon)
##升级的logger 在新版中对pomelo中的logger进行了升级 & - logger支持自定义prefix输出,把prefix打印在消息的头部,prefix可以是文件名,serverId, host 等等 - logger在debug模式下支持log行号的打印,方便开发者分析调试 & - 在pomelo中的日志统一输出到了category为pomelo的appenders && 详细情况请看 [pomelo-logger](/NetEase/pomelo-logger)
##pomelo-protobuf支持rootMsg的proto文件定义 & 通过定义rootMsg,可以很好的进行复用,简化protos文件的大小 & ``` { & "message Path": { & & "required double x" : 1, & & "required double y" : 2 & }, & "message Equipment" : { & & "required uInt32 entityId" : 1, & & "required uInt32 kindId" : 2 & }, & "onMove" : { & & "required uInt32 entityId" : 1, & & "repeated Path path" : 2, & & "required float speed" : 3 & }, & "area.playerHandler.enterScene" : { & & "message Player" : { & & & "message Bag" : { & & & & "message Item" : { & & & & & "required uInt32 id" : 1, & & & & & "optional string type" : 2 & & & & }, & & & & "repeated Item items" : 1 & & & }, & & & "required uInt32 entityId" : 1, & & & "required uInt32 kindId" : 2, & & & "required Bag bag" : 3, & & & "repeated Equipment equipments" : 4 & & }, & & "optional Player curPlayer" : 2 & } } ``` 以上定义的Equipment和Path都是可能复用的root message。 详细情况情况 [pomelo-protobuf](/pomelonode/pomelo-protobuf#rootmessage-support)
Pomelo 的详细介绍:
Pomelo 的下载地址:
想通过手机客户端(支持 Android、iPhone 和 Windows Phone)访问开源中国:
旧一篇: 2年前
新一篇: 2年前
相关讨论话题
你也许会喜欢
@红薯..不支持markdown 啊...
2楼:searchjack
引用来自“打杂程序猿”的评论@红薯..不支持markdown 啊...- 没说过支持啊
3楼:大鸡蛋
顶一下,pomelo一直很酷,这是来自firefly的友情问候!
4楼:车开源 来自
pomelo是什么玩意?
5楼:理工小强
没有用过这个东东 真不知道是干嘛用的 看上去像是一个通讯框架的样子~
6楼:打杂程序猿
引用来自“车开源”的评论pomelo是什么玩意? 基于nodejs 实时后端...
7楼:黎开宇
引用来自“大鸡蛋”的评论顶一下,pomelo一直很酷,这是来自firefly的友情问候!到哪都能看到你啊, firefly还是不错的
与内容无关的评论将被删除,严重者禁用帐号
本周热点资讯
本站最新资讯您现在的位置: >
pomelo代码分析系列1————介绍
更新: 00:10:53&&|&&来源:转载投稿&&|&&作者:小极
前面学firefly的过程让我学到了很多知识,但是简单的掌握一个小server完全不够用,所以决定再吃几个。神马erlang,golang,mina,c++,node.js,都尽量了解了解。先学开源的,那么就Pomelo吧!
pomelo,柚子,是网易(NetEasy)的一个基于Node.js的开源GameServer框架。
我前面介绍过firefly,初步看pomelo的时候,第一感觉就是pomelo的代码质量明显要高firefly一个档次。
具体我还没有深入了解。老规矩,想到哪里写到哪里。
老家在这里:
github在这里:
和firefly一样,这个项目也自带一个游戏,不过是基于HTML5的页游,在这里:
在它的介绍里面列出了很多客户端的支持,赞一个!
这个介绍视频()讲的不错,那个哥们讲的挺好,看一遍有助于快速了解。
OK,到这,假设大家已经逛了一圈回来了。对pomelo是个啥玩意也有大致了解了。
下面轮到代码了。
先安装Node.这里省略了。。。。
然后 git clone 那个pomelo,这个是Node.js的代码,安装: $sudo npm install -g;
俺node刚入门,看的是这篇快速入门:
&(中文版,全)
英文版的是不全的,当然网上有PDF下载,大家自己找吧。
api必须是要过一遍的,但也只需浏览即可,反正俺看一遍最多只能够知道大体有啥玩意。用到再查。
OK,到这里,假设大家和我一样Node.js入门了。(shame it)
那么我们回头看上面安装命令: npm,这个是node的包管理工具,类似linux的apt,mac的port,brew。python的easy-具体命令和用法过一遍,用的时候再说。
OK,pomelo也安装好了,而且我们在npm安装的时候使用的是-g;global 选项,说明安装到系统目录。那么系统会自动安装pomelo这个可执行程序。
chenee[183]:~/myCode/NodeJS/helloworld/web-server$ file `which pomelo`
/usr/local/bin/pomelo: symbolic link to `../lib/node_modules/pomelo/bin/pomelo'
chenee[183]:~/myCode/NodeJS/helloworld/web-server$ f /usr/local/lib/node_modules/pomelo/bin/pomelo
/usr/local/lib/node_modules/pomelo/bin/pomelo: a node script, ASCII text executable
chenee[183]:~/myCode/NodeJS/helloworld/web-server$
如上可见,其实pomelo这个可执行文件就是一个node.js的脚本。有兴趣的可以vi看看。
其实下面大家可以git clone 那个lordofpoemlo的HTML5游戏玩玩,这个后面肯定要仔细学习的,所以我们这里不提了。
我们直接来看pomelo的最简单的demo。
¥pomelo init helloworld
系统会自动的在当前目录生成一个helloworld文件夹,里面是一个非常简单的pomelo工程,这个工程包括2个模块,一个是game-server,一个是web-
平行目录有个非常简单的脚本:
chenee[183]:/tmp/helloworld$ ls
game-server
npm-install.bat
npm-install.sh
web-server
chenee[183]:/tmp/helloworld$ cat npm-install.sh
cd ./game-server && npm install -d
echo '============
game-server npm installed ============'
cd ./web-server && npm install -d
echo '============
web-server npm installed ============'
chenee[183]:/tmp/helloworld$
我们执行这个脚本,生成这个工程: $sudo sh npm-install.sh (我linux上要sudo,但是mac上好像又不需要,没有仔细研究,先放着)
OK,生成成功的话,控制台会有下面的输出。
npm info ok
============
web-server npm installed ============
OK,现在我们来看这个2个模块:
game-server:这个其实就是pomelo的游戏服务器,启动命令是在这个目录下面:$pomelo start 会有打印输出提示启动了几个服务,具体我还没有看。
web-server:这个其实和pomelo关系不大,就是调用Express这个Node.js的web框架来写一个非常简单的网页server。启动方法:$node app.js
这个时候大家打开console上提示的URL会看到哦一个非常简单的页面,点击页面下面的按钮,会有一个js的alert提示。说明我们的web-server和game-server都运行ok了。
下一章我们来详细看看web-server到底是啥。
温馨提示! 为了您获得更好的浏览体验,推荐使用IE8以上版本或Chrome等高级浏览器浏览本站。
声明:本站并不以盈利为目的,旨在分享互联网,所有网站收入均用于网站维持及服务器的日常开支,并为大家带来更好的服务体验。
如果本站内容有侵犯您的利益,请直接联系。
Copyright &copy 极客来() All Rights Reserved.pomelo sync在lordofpomleo的使用分析 - wangqiuyun的专栏
- 博客频道 - CSDN.NET
3313人阅读
关于pomelo sync的使用其实官方是有一篇文档介绍的,,后来看了
这个文档,发现里面的数据持久化模块也有讲到pomelo sync,但本人对nodejs属于菜鸟级别,居然没看懂,今天抽时间结合lordofpomleo源码好好看了一下,终于弄懂了,特此分享。
话说Lord采用Pomelo-sync从内存同步数据到数据库,是为了减轻数据库压力,它的工作原理是创建一个sql行为处理队列,每隔一段时间轮询一次,执行队列里的sql 操作。那么它在Lord中是如何发挥作用呢?
简单来讲特就是使用了nodjs的EventEmitter,在Lord中很多实体对象都是继承自EventEmitter的,然后都定义了一个save方法用来触发“save”事件,在这些对象加入场景时注册save监听器,监听到&save&事件时就执行sync的exec来添加异步定时执行的数据库更新操作。在场景中,如果需要更新数据,如:增加玩家经验,就直接调用对应实体对象的save方法即可。具体分析如下:
如果你看了
这个文档的话,你很容易发现,当用户登录验证完毕之后,客户端web-server/public/js/ui/clientManager.js,就会向场景服务器发请求进入场景:
function enterScene(){
pomelo.request(&area.playerHandler.enterScene&, null, function(data){
app.init(data);
场景服务器game-server/app/servers/\area/handler/playerHandler.js,会获取玩家及场景,然后将玩家加入到场景对象中:
handler.enterScene = function(msg, session, next) {
if (!area.addEntity(player)) {
logger.error(&Add player to area faild! areaId : & + player.areaId);
这里先看看这个player,在game-server/app/domain/entity/player.js中,其实是继承自character
util.inherits(Player, Character);
game-server/app/domain/entity/character.js,继承自entity
util.inherits(Character, Entity);
game-server/app/domain/entity/entity.js,继承自EventEmitter
var Entity = function(opts) {
EventEmitter.call(this);
util.inherits(Entity, EventEmitter);
而在game-server/app/domain/entity/player.js中,定义了save方法用来触发“save”事件
// Emit the event 'save'.
Player.prototype.save = function() {
this.emit('save');
有了触发事件,再来看看如何监听事件,看这个area.addEntity,在game-server/app/domain/area.js中,作用是将那个player通过eventManager加进来:
exp.addEntity = function(e) {
eventManager.addEvent(e);
然后game-server/app/domain/event/eventManager.js,
exp.addEvent = function(entity){
addSaveEvent(entity);
调用了这个addSaveEvent函数,来注册监听器,监听&save&事件
* Add save event for player
* @param {Object} player The player to add save event for.
function addSaveEvent(player) {
//通过同步工具,回写相关信息到数据库
var app = pomelo.
player.on('save', function() {
app.get('sync').exec('playerSync.updatePlayer', player.id, player.strip());
player.bag.on('save', function() {
app.get('sync').exec('bagSync.updateBag', player.bag.id, player.bag);
player.equipments.on('save', function() {
app.get('sync').exec('equipmentsSync.updateEquipments', player.equipments.id, player.equipments);
当player、bag、equipments这三个对象见监听到&save&事件就会执行sync的exec来添加异步定时执行的数据库更新操作。
接下来看如何触发“save”事件,以玩家郑家经验为例,player对象直接调用this.save方法即可。
//Add experience
Player.prototype.addExperience = function(exp) {
this.experience +=
if (this.experience &= this.nextLevelExp) {
this.upgrade();
this.save();
最后再来看看pomelo sync是如何配置使用的。
很简单,在game-server/app.js配置
// Configure database
app.configure('production|development', 'area|auth|connector|master', function() {
var dbclient = require('./app/dao/mysql/mysql').init(app);
app.set('dbclient', dbclient);
app.load(pomelo.sync, {path:__dirname + '/app/dao/mapping', dbclient: dbclient});
app.load(pomelo.sync, {path:__dirname + '/app/dao/mapping', dbclient: dbclient});给sync提供了持久化时同步方法的映射及数据库连接dbclient,其中在game-server/app/dao/mapping下定义了同步方法,以bagSync.js为例,直接就是一个update语句:
module.exports = {
updateBag: function (dbclient, val, cb) {
var sql = 'update Bag set items = ? where id = ?';
var items = val.
if (typeof items !== 'string') {
items = JSON.stringify(items);
var args = [items, val.id];
dbclient.query(sql, args, function (err, res) {
if (err) {
console.error('write mysql failed! ' + sql + ' ' + JSON.stringify(val));
cb(!!err);
好了最后总结一下,使用流程就是:先在app.js设置app.load(pomelo.sync, {path:__dirname + '/app/dao/mapping', dbclient: dbclient});,然后在game-server/app/dao/mapping下定义了同步方法的js脚本,最后使用exec执行即可,如:app.get('sync').exec('bagSync.updateBag', player.bag.id, player.bag);为方便使用exec,Lord引入了EventEmitter来处理。如果你对EventEmitter不熟的话,可以看看下面这个例子:
var util = require(&util&);
var events = require(&events&);//EventEmitter通过events模块来访问
function MyStream() {//新建一个类
events.EventEmitter.call(this);
util.inherits(MyStream, events.EventEmitter);//使这个类继承EventEmitter
MyStream.prototype.write = function(data) {//定义一个新方法
this.emit(&data&, data);//在此触发名为&data&事件
var stream = new MyStream();
stream.on(&data&, function(data) {//注册监听器,监听名为&data&事件
console.log('Received data: &' + data + '&');
stream.write(&It works!&); // Received data: &It works!&
本人对nodejs仍属于菜鸟级别,pomelo也刚上手不久,有错在所难免请多多指教!
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:457471次
积分:6567
积分:6567
排名:第1403名
原创:122篇
评论:389条
NAME:FCPlayer
CITY:Beijing
Degree:Master
Skills:Java、IOS、.NET
文章:11篇
阅读:35709
(1)(2)(2)(1)(1)(1)(2)(1)(1)(1)(1)(1)(3)(5)(6)(1)(5)(5)(5)(4)(2)(8)(5)(5)(8)(14)(16)(5)(5)(5)(3)(2)(1)(2)(3)}

我要回帖

更多关于 pomelo api 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信