→ Schottky: 問題在於你為什麼會設計成一秒需要 accept 上萬次吧 03/14 23:04
老闆的需求 QQ
推 easyman: vector 存 index + session, 就不用lock ? 03/15 00:27
index是int64_t, 直接先配置好vector好像有點太大, 還有session連線斷線的問題勢必要lock
→ tinlans: 白說這問題打成英文上 stackoverflow 問應該會比較好 03/15 02:30
→ tinlans: 坦白說 03/15 02:30
→ tinlans: 目前可以知道的資訊有點少,也許你目前這層可以複製 N 個 03/15 02:35
→ tinlans: docker containers 去跑起來,然後最前端再擋個類似負載 03/15 02:36
→ tinlans: 平衡的東西,譬如根據 index % N 的值來轉發封包給對應的 03/15 02:36
→ tinlans: container 處理這個 request。這種解法比較偏向架構解, 03/15 02:38
→ tinlans: 考量將來 scalability 的話你早晚要做類似的工。如果你只 03/15 02:39
→ tinlans: 打算先集中在程式解,那試試看起多個 io_context 有沒有 03/15 02:40
→ tinlans: 什麼用吧。 03/15 02:40
→ tinlans: io_service 在新版 boost 已經 deprecated 了。 03/15 02:41
→ tinlans: 簡單講的話目的都是先增加你程式的入口數,然後把原本因 03/15 02:47
→ tinlans: 為 lock 變成瓶頸的單一大資料塊拆分成多個。 03/15 02:48
其實就是GameServer的入口, index就是玩家資料在DB的ID,
資料轉到其他Service去處理完後,再丟回給GameServer傳給對應的玩家,
所以它才需要一個ID跟Session的Map,
目前的確我是有設計類似加開分流的概念去處理這件事,
但不同的Server的遊戲邏輯是不互通的, 所以還是想增加單個伺服器的承載量.
※ 編輯: klsdf (122.117.102.47), 03/15/2019 07:10:46
→ tinlans: 這種東西連線建立以後就不需要再反覆 accept 了,每秒上 03/15 12:13
→ tinlans: 萬次的連線需求是怎麼出現的?畢竟不是 http 這種連完 03/15 12:14
→ tinlans: 一次就斷一次的連線型態。 03/15 12:14
→ sarafciel: int64_t你也用不完呀 實務上你抓個可以涵蓋峰值的大小 03/15 14:32
→ sarafciel: 配就好了 而且vector要鎖最起碼可以個別鎖呀 03/15 14:35
推 ketrobo: 每一條連線有平均與最大的耗用資源量,同時估計一下resp 03/16 07:29
→ ketrobo: onse time/CPU時間,找出一臺機器的服務上限,對應的sess 03/16 07:29
→ ketrobo: ion數量一次配置完,連線對應固定的索引值就不用map了 03/16 07:29
主要是索引值是玩家的編號 即使知道目前的帳號數量pre-allocate
但對新註冊的帳號沒有用, 不過使用vector跟隨機存取的想法我可能可以多想一下
※ 編輯: klsdf (122.117.102.47), 03/17/2019 00:08:03
推 steve1012: 寫個load balancer 03/17 01:02
→ LiloHuang: 若非得查表可考慮使用 tbb::concurrent_unordered_map 03/17 20:09