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

關(guān)于gatewayworker做游戲服務(wù)器的一些問題

a3563115

目前正打算用gatewayworker框架做游戲服務(wù)器
正進(jìn)行框架搭設(shè) 遇到些問題 希望能一起幫我探討一下
1.關(guān)于gatewayworker
a.請問在一臺電腦上設(shè)置bussinessworker的count數(shù)為8 與同一臺電腦上運行兩次不同目錄的bussinessworker 設(shè)置count數(shù)為4 是否有什么不一樣?一臺電腦上的進(jìn)程數(shù) 不管是否是屬于同一個目錄 總和都最好是cpu數(shù)的8倍 這樣嗎?還是說單次運行一個目錄下的bussinessworker count數(shù)為cpu的8倍?多次不同目錄可以再次8倍?
b.同一臺電腦不同目錄運行bussinessworker,若不改名字($worker->name)會報錯name重復(fù) 而不同電腦開則不會 是因為什么原因
c.bussinessworker的內(nèi)部通訊端口比如2700~2704 不同目錄開啟多個,name設(shè)置不同 但端口一樣 沒有出現(xiàn)報錯的情況,這樣它們內(nèi)部通訊是否會受影響?

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

6209 1 2
1個回答

walkor 打賞

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

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

  • a3563115 2017-06-08

    非常感謝walkor大大的回答!

  • a3563115 2017-06-08

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

  • walkor 2017-06-08

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

  • a3563115 2017-06-08

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

  • walkor 2017-06-08

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

  • a3563115 2017-06-08

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

  • walkor 2017-06-08

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

  • a3563115 2017-06-08

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

  • a3563115 2017-06-08

    @1873:walkor大大 不好意思 我再再再問個問題哈 針對上面這個連接數(shù)的問題
    同一個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 了解~

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