关于gatewayworker做游戏服务器的一些问题

目前正打算用gatewayworker框架做游戏服务器
正进行框架搭设 遇到些问题 希望能一起帮我探讨一下
1.关于gatewayworker
a.请问在一台电脑上设置bussinessworker的count数为8 与同一台电脑上运行两次不同目录的bussinessworker 设置count数为4 是否有什么不一样?一台电脑上的进程数 不管是否是属于同一个目录 总和都最好是cpu数的8倍 这样吗?还是说单次运行一个目录下的bussinessworker count数为cpu的8倍?多次不同目录可以再次8倍?
b.同一台电脑不同目录运行bussinessworker,若不改名字($worker->name)会报错name重复 而不同电脑开则不会 是因为什么原因
c.bussinessworker的内部通讯端口比如2700~2704 不同目录开启多个,name设置不同 但端口一样 没有出现报错的情况,这样它们内部通讯是否会受影响?

2.关于游戏框架的探讨
a.目前要做大世界类型的游戏,能够跨服,转服这些玩法,目前是想利用gateway来区分是哪个服连接过来的,但是$_SERVER里面的信息比较少 ,想用端口进行区分,但是就需要做一个配置来映射服务器ID,有没有什么方式可以直接在gateway代码里配置一个服务器ID 类似$_SERVER里的那样 bussinessworker可以识别服务器ID是多少.
b.另一个方案是在登录服做服务器选择记录 选择不同的gateway地址(可能相同,走配置 对应不同服务ID)对应不同的服务ID 下发给客户端 再又客服端传过来(做转服也是类似的方案)传给游戏逻辑服 旧的服务器ID与转服的服务器ID,由此去老的服务器(数据库)取数据 交互时跟新转服的这个服玩家交互。
c.gateway的瓶颈大概是能支持多少的并发,每个服务器一个gateway好呢,还是多个共用一个gateway
d.假如我采用了以上方案,目前想来想跨服(假设1000个服务器)就得一个bussinessworker建立1000个数据库的连接,有N个Bussinessworker进程每个数据库的连接就是N个这样下去会超过数据库连接数最大值(用的mysql)有没有更好的方案
e.假如说就采用了以上方案,游戏业务里面有排行榜这个东西,因为以上是采用了伪转服(玩家数据库没有迁移还是在原来的数据库上)只是做了广播时按服区分,数据交叉比较厉害,比如做1服的排行榜必须遍历所有的数据库取出1服的玩家来进行排行,是想做一个排行榜服务器所有请求排行数据单独处理,有没什么更好的方法解决
或者说更好的架构,解决大世界的问题。
小弟水平有限,只想到这些方法,希望大神们指点一二~~在此谢过啦
已邀请:

walkor

赞同来自: asssing

1、GatewayWorker
a、bussinessworker的count数为8和两组bussinessworker各设置count数为4 默认没区别。但是gateway路由会用到bussinessworker->name
b、gateway有个路由功能,gateway与所有businessWorker进程建立一个链接,这些链接在gateway进程里是一个数组,数组的key是 "ip:worker_name:worker_id",所以同一个服务器上启动相同worker_name的businessWorker进程会报冲突
c、 不影响


2、关于游戏框架的探讨
a、这个属于业务逻辑了。自己映射下就好了
b、都可以,需要自己权衡
c、并发和业务相关。连接数没限制,每个服务器根据cpu核数设置gateway进程数,1核开一个gateway进程,4核开四个...
d、一般不会采用1000台服务器,mysql就一台这种架构。一般几十台服务器与几台mysql(一主多从)组合成一个区。多个区之间不共用相同的数据库。
e、排行榜可以单独new 一个Worker进程,处理排行榜数据。排行榜进程和实时处理客户端请求的进程不同,最好分开做。

要回复问题请先登录注册