pomelo 新特性征集活动

pomelo 从去年11.20开源,已经将近一年时间;这一年中pomelo已经经历了7个大版本的迭代,也正在逐渐成长,作为一个开源项目,pomelo的发展离不开大家的支持;在pomelo快1周岁的时候,我们开始向大家征集对pomelo的意见,大家可以畅所欲言,大家对pomelo觉得不好的地方,好的地方,希望能够改进的地方,希望加入的新特性等等。期待大家的意见,在这次活动结束后我们将对大家的意见进行整理,然后再开始pomelo新的旅程。

标签:无
py8765 在 2013-11-8 10:19发布 分享到 weibo
52 回复
#1 w3hacker 2013-11-8 10:20 回复

没想好 想好了再修改

#2 DoDeo 2013-11-8 10:43 回复

Pomelo 对于消息超时的处理机制

  1. 客户端发送消息的过程,服务端还没接收到的超时情况,客户端的应对措施是消息重发(reqId相同)
  2. 客户端发送消息的过程,服务器处理完消息,服务器返回客户端时,客户端因为没有收到消息而判定为超时的情况,客户端的应对措施是消息重发(reqId相同),服务器的处理方式是绕过消息处理环节,直接返回这个request所对应的response
  3. 服务器推送消息时,客户端没有收到消息,服务器可以重新发送当前的推送消息(push reqId 相同),由于性能问题,我个人觉得,服务器推送回折可以作为一个开发机制,允许用户选择是否开启或关闭,最好可以针对某些消息做回折处理
#3 {4} DoDeo 2013-11-8 10:45 回复

希望可以用比较简单的方式来配置如:

Socket + HTTP 形式结合的服务器架构

Cooron 2013-11-24 13:19 回复

DoDeo,我使用你的PomeloFlash SDK,发现能连接上服务器,但是连接上后,马上socket就被关闭了,经过测试,发现只要在连接上后,往_socket里面写入任何数据连接就会立马被关闭,怎么回事儿啊?

[Pomelo] start: {"sys":{"type":"pomelo-flash-tcp","version":"0.1.3b","pomelo_version":"0.5.x"}}

[Pomelo] start to connect server ...
[Pomelo] connect success ...
[Pomelo] flush ...
[Pomelo] connect close ...

输出内容是这样……

DoDeo 2013-11-25 15:38 回复

@Cooron

可以检查一下,是不是服务器主动断开了客户端的连接

最好pomelo的版本先控制在0.5.x中做测试,等没问题再升级到最新版

这个 sdk 目前是beta版本,测试环境是 0.5.x的,等正式版发布,会支持 pomelo 最新版

Cooron 2013-11-26 09:26 回复

@DoDeo 现在可以连接服务器可以成功了,另外我稍微优化了一下你的SDK,主要优化了你SDK的事件以及代码提示~有你的联系方式就更好了,邮箱或者QQ,或者也可以联系下我:123497528

DoDeo 2013-11-26 10:12 回复

@Cooron
加你了,想了解下你优化的部分

#4 {1} teriyaki 2013-11-8 10:53 回复

game server能否支持http的long polling,而不只是socket的

xiecc 2013-11-8 11:11 回复

socket.io支持long polling的, 如果想long polling优先, 只要简单改下配置就可以了。

#5 teriyaki 2013-11-8 11:44 回复

socket.io支持long polling 这个是http的吗 象新webqq那样 能传统防火墙的

#6 teriyaki 2013-11-8 11:46 回复

抱歉 是能穿透防火墙的

#7 teriyaki 2013-11-8 11:46 回复

在stackoverflow新开了pomelo的tag

#8 sonygod 2013-11-8 13:01 回复

1:代码提示不够友好.
2:不支持jsduck,yun js 这样的文档生成器。
我想用这个jsduck生成一个json,然后再自动化转换成Haxe,或者typescript的方便extern.

#9 nobody 2013-11-8 13:32 回复

1,希望能单独生成GS(webserver暂时木有用),
2,希望增加源代码加密功能

#10 {1} infern0 2013-11-8 14:43 回复

1.数据中间层, mysql+redis, mongodb+redis
2.代码混淆
3.在同步发展个python版的pomelo吧, 异步+同步

ford88998 2013-12-5 17:17 回复

迫切希望有数据中间层,mysql+redis!

#11 roytan 2013-11-8 14:47 回复

基于UID的用户系统,能够调用简单的API就能实现单发,群发,且可以在发送的时候传递发送选项,直接发还是队列发。

#12 {2} roytan 2013-11-8 15:10 回复

pomelo的文档是硬伤,很多特征都号称支持了,但又不告诉具体每步怎么配置,需要什么先后顺序和前置条件。经常实际去用,发现按照官方的文档根本弄不出来。

举两个例子:
1,master高可用,显示看了0.5的文档去弄,没成功。然后被告知0.6里面改了plugin机制,让去看plugin怎么配置,按照plugin的文档弄,还是不成功。 最后......放弃。话说,除开官方,使用pomelo的人有把这个master高可用搞成功的么?

2,pushScheduler配置,0.4和0.7的文档都只是说支持direct和buffer,但是没有一个地方说这个两个东西在哪里配置。

唯一用成功的新特征就是服务器child进程kill后自动恢复。其他的新特征,用的很少,不发表意见,也不知道是不是还有更多的坑。

py8765 2013-11-8 15:31 回复

谢谢提出的意见,我们正在改进,在新特性的文档这方面我们会补充,现在分布式部署的文档已经出了,master高可用的具体配置文档也会在近期发布。

xiecc 2013-11-8 15:46 回复

master高可用的前提是zookeeper要高可用, 的确zookeeper配置这块还是有点门槛的,普通应用也不需要这个功能。

谢谢你提的意见,我们要经常把新特性的文档合到整体文档中。

#13 mxlhy 2013-11-9 14:46 回复

handlerService.js里面 getHandler 出错后,为什么不返回一个错误消息到客户端啊,希望能加上!

#14 {1} mxlhy 2013-11-11 12:53 回复

app.enable('systemMonitor')希望在window环境下能用

teeva 2013-11-20 09:57 回复

windows不支持ndoe-webkit-agent吧

#15 {1} Koyoter 2013-11-11 16:20 回复

API能不能改成nodejs的一样 现在的看起来好别扭 没一点条理的样子

Koyoter 2013-11-11 16:21 回复

是文档

#16 gtd138 2013-11-12 09:22 回复

支持csv表格解析

#17 ahkai 2013-11-12 17:53 回复

增加一个棋牌demo吧

#18 {2} kmend 2013-11-13 15:34 回复

文档太混乱了、
demo也不全面、 能否提供一个完整的包括测试、服务器管理的 demo

如 lordofpomelo 附加上全部的 Pomelo 性能测试的代码 连带 pomelo-admin-web 一系列的新特性都捆绑起来提供个DEMO

roytan 2013-11-13 22:10 回复

这个提议nice好, 就一个demo把大部分功能都demo出来,免得每个功能都需要研究半天.再比如zookeeper, 子进程重启, 开机启动, 连接数优化等等这些, 一个教程下来,产品级的东西就出来了. 大大降低pomelo的上手难度.

xiecc 2013-11-14 09:57 回复

@roytan 嗯, 不过lordofpomelo太复杂了。我觉得把聊天这个demo补完整可能更好

#19 crazybach 2013-11-19 10:54 回复

作为game server,希望pomelo能在底层的基础上,为各个server app 提供默认的UpdateFrame时常函数,可以在初始化的时候,确实是否开启或者多少的频率来执行Update函数,虽然现在开发者可以通过自己的代码来实现这一块,但是作为game server framework,还是希望能从框架上增加可以配置的UpdateFrame 接口,面向桌面游戏(web)或者在越来越复杂移动游戏端的,game server的时常Update还是十分有必要的。

#20 {2} mxlhy 2013-11-21 10:54 回复

应该给app加个全部服务器启动完成后的方法
如:app.afterAllStart(cb);
这样,在服务器全部server启动完成了后,才好进行一些相关的数据初始化加载这类的操作

xiecc 2013-11-21 11:03 回复

good, 生命周期的东西要好好整理

guolianghu 2013-12-5 13:48 回复

@xiecc 支持。否则在启动过程中,有请求进来,但其他server还没好的时候,调用 RPC 就会报错。

#21 {6} peterchen 2013-11-24 01:26 回复

BackendSessionService能否增加新的全局方法 getBySid ?
BackendSession只对当前请求有效,这导致后端服务游戏逻辑经常取不到BackendSession。
在我的实际开发过程中,经常需要将用户的状态写入session,然后pushAll到全局,这是业务逻辑决定的并非由客户端驱动,在取不到BackendSession的情况下只能绕弯,导致逻辑变复杂,能不能提供一个全局方法getBySid,在任何时候都能取到BackendSession呢?这样就方便太多了

xiecc 2013-11-24 22:29 回复

嗯,我们要考虑一下实现方式,可能要在status-pugin里实现

peterchen 2013-11-25 20:29 回复

@xiecc
此外,我觉得目前的框架在session的管理上不够强悍。
比如说在处理移动应用中的闪断重连,每次重连都会产生一个新的session id,之前保存在session中的许多变量就都失效了,还得到数据库中查询并赋值。
Channel中add的方法其实也是绑定到对应session中的,光看参数初学者根本不了解情况,session id改变后通过getMembers()方法,虽然该用户id还在该channel内,实际上session已经对应不上了。
因为session的原因,个人觉得Channel的方法不太靠谱,提送消息还不如用ChannelService.pushMessageByUids来得靠谱,Channel就显得鸡肋了

fantasyni 2013-11-26 09:13 回复

@peterchen

需要持久使用的变量应该放在redis之类的吧

roytan 2013-11-28 14:14 回复

@peterchen
你说对了,我们也是只用

Service.pushMessageByUids

channel从来不往里面放东西,只是借用它的这个pushMessageByUids方法。

wangdy 2013-12-6 12:38 回复

@peterchen 我也是只用pushMessageByUids,channel这个概念使用情景太少了,但在pomelo里层级却很高

ranbo 2013-12-15 15:46 回复

@wangdy channel这个概念貌似很早以前网易一直在用,云风的blog里边有提到,可能是他们的传统吧。

#22 {4} hjp20061013 2013-11-28 11:25 回复

pomelo的全局函数定义
目前我是在app.js里这样写
/@调试信息/
global.trace = function(obj){
console.log(obj);
}
/@取随机数/
global.rand = function(Min,Max){
var Rand = Math.random();
if(!Min&&!Max){
return Rand;
}
var Range = Max - Min;
return(Min + Math.round(Rand * Range));
}
不知道这样写对还是不对,不过目前使用还是正常的

xiecc 2013-11-28 21:28 回复

为什么要写全局函数? 尽量不要用, 容易出bug

hjp20061013 2013-12-3 21:33 回复

@xiecc 没有全局函数的需求么?比如说取相应配置文件
global.getConf = function( conf ){
return require('./config/'+conf+'.json');
}
这样不是任何地方只要调用getConf(xxx)就能取到相应的配置
global.time = function(){
return Math.round(new Date().getTime()/1000);
}
不是非常方便么?
什么情况下会出bug?

xiecc 2013-12-5 17:42 回复

@hjp20061013 require进来一个util类就好了, 全局函数没有名字空间,被覆盖了就惨了

hjp20061013 2013-12-6 23:10 回复

@xiecc 确实可能出现这个问题,感谢提醒!

#23 {1} gopig 2013-11-29 17:02 回复

希望框架可以集成像erlang这样热部署的特性

vegapan 2013-12-5 10:47 回复

同样很迫切的希望有这个特性哦。
每次游戏维护都需要重启确实让人很不舒服

#24 wangdy 2013-12-6 12:45 回复

我希望增加的功能是开放内部rpc接口,用别的语言也能实现,可以把不适合node的功能用更合适的工具去实现,可以仅限remote。配置server的时候能区分一下内部还是外部,外部的就不需要master启动了。虽然说用http也能实现外部rpc功能,但效率肯定不如内部的高。

#25 zlstt 2013-12-23 17:44 回复

消息 可以随意选择 TCP 还是UDP 。 支持实时性高的游戏

#26 {1} MJiao 2013-12-30 12:17 回复

同样强力建议集成热部署
1、当修改node.js项目中任何文件并保存,自动reload
2、支持ignore文件,可添加乎略修改的文件或者目录,支持正则

kilua 2014-1-21 20:29 回复

顶一个

#27 bingnam1 2014-1-6 12:32 回复

希望有像nginx那种热升级功能,就是向master发出升级某个服务器的指令后,新版本代码可以开始处理新请求的同时,旧版本代码还可以继续处理已经接收到的请求,等所有旧请求处理完后,旧版本的进程自动停止。

#28 tuoxiansp 2014-1-9 17:57 回复

channel不能设置属性,比如,我想要知道用户想要加入的channel当前能否加入,该怎么处理?

#29 {1} tuoxiansp 2014-1-13 10:45 回复

给connector配置多加一条属性:clientIP,光有clientPort不能监听指定ip地址的端口

tuoxiansp 2014-1-13 10:48 回复

有这个就能部署上bae了,会方便很多

#30 sss316 2014-1-26 11:36 回复

cocos2d-x c++ 和 lua 版本也尽快出吧!

#31 geasslong 2014-2-16 20:25 回复

pomelo-cocos2d-jsb 不能出个mini版么,还有用cocos2d-x console项目编译代码会报错!

#32 kun2029 2014-2-18 15:07 回复

建议出一个pomelo和mogonDB的demo,还有服务器能否增加新的connectors服务类型不?,目前做第三方充值对接等业务时 监听http格式太麻烦。
pomelo的文档还是不够,有时太深入 有时候太简单 没有流线,看一看的就乱了。
demo工具只有一笔带过了,没有详细说明,怎么使用

#33 {2} tuoxiansp 2014-2-20 20:02 回复

启动服务器集群时,除了master控制之外,可否添加一个各服务器单独启动,反正各服务器都有master的ip,启动后,通知maste将它加入集群。

xiecc 2014-2-21 10:27 回复

嗯,0.9版已经支持

tuoxiansp 2014-2-21 12:22 回复

@xiecc 超级给力!

#34 {1} tuoxiansp 2014-2-22 17:06 回复

建议网易推出搭载pomelo的app engine服务。也算为这个开源项目找到一个合适的盈利方式。

py8765 2014-2-24 09:47 回复

好建议

#35 tuoxiansp 2014-2-26 16:10 回复

看到了0.9,跟我想象的还是有点出入啊╮(╯▽╰)╭
我觉得分布式集群不应该只考虑所有机器同样系统同时项目文件夹路径还一致之类的。。这样限制太大了。。0.9的单独启动方式,增加了一条命令,可以用于远程启动,于是还是只能通过ssh。。我觉得pomelo还是应该适应现在云服务器的节奏,各种app engine才是搭载pomelo的绝佳平台。。app engine的一个部署单元就是一个pomelo集群的子服务器。app engine通过增加部署单元的水平扩展方式也与pomelo的分布式思路吻合。
总之,我期待pomelo,可以启动master后,等待其他服务器的连接。使用场景大概是:master启动,等待其他服务器连接。然后手动启动connector,gate等服务器,这些服务器启动后,会通知master自己启动了,从而加入集群。啊,说的有点多~~~

#36 {2} skyblue 2014-4-29 14:53 回复
  • 支持node --harmony
  • 支持udp协议
  • ...想到再补充
py8765 2014-4-29 18:40 回复

udp下个版本就会有

xCocoa 2014-5-12 15:57 回复

udp很容易被攻击。

#37 {1} modun 2014-4-29 20:49 回复

能否在协议的设计上就将防重放做了吧,在应用层自己做还是比较浪费的

jiangzhuo 2014-5-5 14:37 回复

我覺得這個還是自己再應用層面做,因為有一些情況是需要回放的。
比如我們的有種測試方案就是基於重放的。

#38 {1} modun 2014-5-12 10:23 回复

突然想起的一个:在分布式部署的时候,应该允许添加ssh启动参数,比如如果使用亚马逊的服务器做分布式的话,ssh的时候会强制要求添加一个pem证书,或者像另外一个问题中提到的那样,改变ssh的端口号也是可能的

py8765 2014-5-12 15:12 回复

这个功能是有的,可以添加自定义ssh配置参数。在application对象里set('ssh_config_params', '-p 1111')。

#39 modun 2014-5-12 10:27 回复

比如这样的 ssh -i /Users/xxx/.ssh/xxx-EC2.pem ubuntu@ec2-249-17.ap-southeast-1.compute.amazonaws.com'

#40 xx007 2014-5-14 09:56 回复

能不能像上面有些人提的,代码修改,立即生效,不需要重启,这个有的话好很多,现在改一行代码就需要重启pomelo................

能做到像php那样,改php文件立即生效就好了,谢谢

#41 mrFranklin 2014-5-15 10:44 回复

顶楼上,强烈建议出代码热更新方案。

#42 {1} xiaohero 2014-6-17 10:28 回复

强烈建议出一个http版的connector,使用方法上能兼容目前socket的使用方式,可以通过配置文件切换是http通信还是socket通信。

xiecc 2014-6-17 14:11 回复

直接挂express就可以了, http没有下行, 交互模式与长连接不一样。

#43 {2} rainzhao 2014-6-17 15:48 回复

支持MQTT的connector

qklxtlx 2014-6-18 11:06 回复

这个不是马上会有了么~服务器端的已经出来了

rainzhao 2014-6-18 12:08 回复

@qklxtlx good

#44 apaul9999 2014-6-19 20:48 回复

clientprotos.json/serverprotos.json 那2个文件 希望可以支持 用户自己 安功能拆成多个文件 。

#45 destinee 2014-10-31 15:43 回复

希望多增加一些demo,例如充值之类的

#46 smilence 2015-9-6 11:02 回复

把pomelo源码注释写清楚点,提交代码不写注释,小JJ跟注释一样长。。。

#47 {2} linyouhappy 2015-9-7 15:39 回复

看了一个星期这个框架。我也讲几点:
1.大量的函数调用。比如utils.invokeCallback(),这些调用对于脚本语言开支很大的。因为任何函数名都涉及到字符串查找。大量的cb函数回调,导致消息派发很混乱,看得人脑都大。我觉得可以砍掉一半以上,除非你自己写的代码给自己看。
2.即使是压缩的形式路由传输,但是含有大量的路由无用的字符串,加重网络负担。不可以在前后端各维护一张表格吗?服务器id和路由生产一个对于的id表格。可以搞个web后端支持浏览器上动态绑定。这样就可以大大提高运行速度了。避免路由开销。
3.作为底层框架,建议还是用C++开发好,业务层就用node.js。node.js的特性,C++都有啊。比如闭包啊,可以封装一个消息对于闭包的队列,就相当于node.js的事件机制了。传说中的函数结束调用,可以用局部对象,通过析构函数调用啊。
4.如果有时间,我完全可以利用c++11的新特性,用C++抄一份。

fantasyni 2015-9-7 22:27 回复

1:这个确实是会有点性能开销的

2:有 route 字典压缩,最后就是 id

3:c++ 这个问题不谈,各抒己见

roytan 2015-9-7 22:59 回复

问题是目前市场上会C++的程序员少得可怜,要招聘到一个C++大牛更是困难。
市场需求小,学校也不教了
国内的公司能顶住压力让你慢慢用C++开发项目的,少之又少。我自己也做了三五年C++,但是最后还是逐渐转向其它技术,没办法,市场环境就这样。

nodejs个人感觉不适合拿来做游戏框架,性能开销都是问题,特别是那种在线多且对实时性要求高的游戏。我从一开始到现在pomelo都是拿来做移动APP应用后端API服务器,这样来用pomelo可以在开发效率和性能上找到平衡点

#48 {2} linyouhappy 2015-9-7 15:58 回复

脚本语言永远是一坨屎。举个例子。
C++:r=a+b;寄存器复制a的值,然后把b的值add进去,然后移除到内存区域。即完成。
脚本语言:r=a+b;先查找key=a的内存值。涉及离散列查找,哈希取余定位值等。三个变量三次操作。+和=两个符号,又是k-v取值。所有这些准备妥当了。才执行C++的操作r=a+b。效率不知道糟糕C++多少倍。底层框架不C++化,难于实现性能突破。那就定位中小游戏了。但是框架复杂性,做小游戏的人,没有几个搞定的。

fantasyni 2015-9-7 22:29 回复

@linyouhappy

这个建议研究研究 v8 crankshaft

linyouhappy 2015-9-8 23:20 回复

@fantasyni lua的引擎就是这样处理的。难道node.js的效率高于lua?

#49 linyouhappy 2015-9-9 23:31 回复

今天终于体会pomelo的分布式rpc调用.可以实现像erlang一样的不同服务端之间的rpc调用,而且可以设置路由多个服务器。
然后,提个建议。感觉参数太碎片化了。能不能把碎片化的参数移入到frontendSession和BackendSession上去,目前,这两个对象仅仅保存有户关键数据用。
假如组件是各个车间。那么去碎片后的session就是加工的物品。每次收到msg数据,就建立一个msg的任务,msg和session互相保存彼此字段,以便快速调用。组件车间按照msg任务加工处理session物品。这样逻辑关系会清晰很多。

#50 linyouhappy 2015-9-10 14:01 回复

今天再提一点。
1.所有的服务器都是靠master建立链接的。如果master挂了,那不是整个服务器集群都奔溃了。能不能来点仿生学,学习蜜蜂。蜂王死掉以后,群中有工蜂变成了蜂王。
2.断线重连很频繁,每次close,session就被干掉。能不能加个有限容量的session回收池

#51 lupurs 2016-4-12 18:42 回复

请问u3d的sdk何时能支持udp?

#52 {1} sss316 2016-4-14 08:53 回复

1.官网api页貌似很久没更新了,pomelo中很多方法都查不到。
2.希望支持cocosCreator。

sss316 2016-4-14 09:34 回复

cocosCreator网页版稍微修改下,可以连上服务器了。android和ios还是连不上。。。求官方demo。

回到顶部