请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker

zanedeng

现在在以browserquest-php的形式写html5服务端,感觉单个进程上的压力比较大,而且不能热更新,想换成网关+逻辑服务器的形式,求大神提点一下解决思路

4114 2 0
2个回答

walkor

单进程模式用户间数据容易共享
browserquest本身就设计成单进程模式,单进程模式用户间数据容易共享,不用频繁的进程间通讯,开发简单。

改成gateway网关模式利弊
如果要改成多进程gateway网关模式,代码改动量会很大,要求开发者对于browserquest运行机制及代码结构非常熟悉。
即使开发出多进程模式,由于进程间要频繁通讯,整体性能不一定比单进程好。

拿browserquest来说
拿browserquest来说,虽然是单进程模式,但是由于游戏内没有阻塞IO,单进程估计也能支持上千人。
browserquest本身地图并不大,如果是上千人在线估计已经是满屏都是人了,支持再高的在线人数意义不大,人数继续增加的话应该去考虑增加一个browserquest服务,采用多房间(多服)的方式平摊压力。每个服单独的实例,互不影响,可以几乎无限的水平扩展。

所以就browserquest来说,单进程模式+多实例分服的方式会比较好。

非要多进程写个browserquest
假设非要突破browserquest单进程限制,可以考虑为每个地图创建一个进程,用户切换地图时,关闭原来socket链接,并重新链接连到对应的地图服务器进程。由于不同地图的人之间不会有太多的消息通讯,所以不需要太多进程间通讯,这样每个地图都可以承载上千人,那么多个地图就可以承载更多人。

这样一组browserquest进程应该比原来单进程承载更多的在线用户,如果用户量继续增加,还是老套路,开新的游戏服务器房间。

再优化
再优化可能就是把游戏拆分成更多的服务,登陆服务、接入服务、地图服务、AI服务等,然后针对每个服务做优化,多进程多服务器支持等。具体如何做与服务类型有关,得具体问题具体分析了。

我本身不是做游戏的,抛砖引玉,欢迎大家讨论

  • 暂无评论
国庆七天乐

一直收藏着此问答,就想着那天能实现walkor说的思路...好久好久以后,再次过来学习gatewayworker,哈哈
取巧的把BrowserQuest-PHP改成了gatewayworker模型,把原先的worker粗暴的改成了gatewayworker中的一个gameworker
https://github.com/wonderful60/BrowserQuest-Gatewayworker
沿着walkor的思路...先不拆分,太难了,哈哈...先打算加上数据库,比如redisworker来存玩家数据,增加账号注册功能使用mysqlworker来存放账号信息等...

  • 暂无评论
年代过于久远,无法发表回答
🔝