国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關于gatewayworker做游戲服務器的一些問題

a3563115

目前正打算用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來區(qū)分是哪個服連接過來的,但是$_SERVER里面的信息比較少 ,想用端口進行區(qū)分,但是就需要做一個配置來映射服務器ID,有沒有什么方式可以直接在gateway代碼里配置一個服務器ID 類似$_SERVER里的那樣 bussinessworker可以識別服務器ID是多少.
b.另一個方案是在登錄服做服務器選擇記錄 選擇不同的gateway地址(可能相同,走配置 對應不同服務ID)對應不同的服務ID 下發(fā)給客戶端 再又客服端傳過來(做轉服也是類似的方案)傳給游戲邏輯服 舊的服務器ID與轉服的服務器ID,由此去老的服務器(數據庫)取數據 交互時跟新轉服的這個服玩家交互。
c.gateway的瓶頸大概是能支持多少的并發(fā),每個服務器一個gateway好呢,還是多個共用一個gateway
d.假如我采用了以上方案,目前想來想跨服(假設1000個服務器)就得一個bussinessworker建立1000個數據庫的連接,有N個Bussinessworker進程每個數據庫的連接就是N個這樣下去會超過數據庫連接數最大值(用的mysql)有沒有更好的方案
e.假如說就采用了以上方案,游戲業(yè)務里面有排行榜這個東西,因為以上是采用了偽轉服(玩家數據庫沒有遷移還是在原來的數據庫上)只是做了廣播時按服區(qū)分,數據交叉比較厲害,比如做1服的排行榜必須遍歷所有的數據庫取出1服的玩家來進行排行,是想做一個排行榜服務器所有請求排行數據單獨處理,有沒什么更好的方法解決
或者說更好的架構,解決大世界的問題。
小弟水平有限,只想到這些方法,希望大神們指點一二~~在此謝過啦

6118 1 2
1個回答

walkor 打賞

1、GatewayWorker
a、bussinessworker的count數為8和兩組bussinessworker各設置count數為4 默認沒區(qū)別。但是gateway路由會用到bussinessworker->name
b、gateway有個http://doc2.workerman.net/326140功能,gateway與所有businessWorker進程建立一個鏈接,這些鏈接在gateway進程里是一個數組,數組的key是 "ip:worker_name:worker_id",所以同一個服務器上啟動相同worker_name的businessWorker進程會報沖突
c、 不影響

2、關于游戲框架的探討
a、這個屬于業(yè)務邏輯了。自己映射下就好了
b、都可以,需要自己權衡
c、并發(fā)和業(yè)務相關。連接數沒限制,每個服務器根據cpu核數設置gateway進程數,1核開一個gateway進程,4核開四個...
d、一般不會采用1000臺服務器,mysql就一臺這種架構。一般幾十臺服務器與幾臺mysql(一主多從)組合成一個區(qū)。多個區(qū)之間不共用相同的數據庫。
e、排行榜可以單獨new 一個Worker進程,處理排行榜數據。排行榜進程和實時處理客戶端請求的進程不同,最好分開做。

  • a3563115 2017-06-08

    非常感謝walkor大大的回答!

  • a3563115 2017-06-08

    walkor我還想問一下關于數據庫連接數的問題
    假如我15個服(15個不同的庫都在同一個mysql上)各自對應一個不同的日志庫(也就是說一個mysql上建了30個不同的庫)因為要做跨服 所以在onworkstart的時候我初始化了連接這30個庫,假如我8核的CPU 我開了64個bussinessworker進程 ,等于同時創(chuàng)建了 30 * 64 = 1920個連接同一個mysql..這怎么整呢

  • walkor 2017-06-08

    一般都是每個服一個獨立的庫吧

  • a3563115 2017-06-08

    @1:因為分服的時候有時不是因為數據量太大 只是運營要求開多服 所以還是同一個臺電腦上的MYSQL 分不同的庫名db_name

  • walkor 2017-06-08

    2000個鏈接對于mysql來說也沒什么壓力,就是內存占用稍微多一點。

  • a3563115 2017-06-08

    @1:那這樣是不是會限制了服務器的性能 要再開服的話 就要再搞臺Mysql

  • walkor 2017-06-08

    你們可以看實際情況來,如果幾百人在線沒什么問題,幾十萬人在線,那就要分了。看情況的

  • a3563115 2017-06-08

    @1:好的 多謝了~~笑臉

  • a3563115 2017-06-08

    @1873:walkor大大 不好意思 我再再再問個問題哈 針對上面這個連接數的問題
    同一個mysql不同的庫名的庫 只建立一個連接,比如有A,B,C,D,E個庫
    我只建立A的連接后面操作B,C,D,E的時候語句帶上操作的庫 先use B,C,D,E 或者帶上庫名
    select from B.表名; 這樣的操作 跟直接建立B的連接 select from 表名;
    有什么性能上的差異嗎 有的話 差異大嗎

  • walkor 2017-06-08

    性能上感覺不到差別。主要是這樣容易出錯,每次還要切換庫。
    最好每個庫一個鏈接。

  • walkor 2017-06-08

    不要給自己找麻煩,用最簡單的方法做,mysql性能沒你們想的那么差。

  • a3563115 2017-06-08

    @1:yes sir 了解~

年代過于久遠,無法發(fā)表回答
??