游戲服務器處理多個連接入口的方案
最近在考慮為一組游戲服務器配置多個連接入口。這個需求來至于我們的國情。作為大的游戲運營商,勢必要考慮國內的網絡狀況——南北不通的現(xiàn)狀。以往別的公司的代理游戲,由于不是自己開發(fā),都選擇了一個實際的方案:在北網通和南電信各放若干組服務器。北邊來的在北邊玩,南方住的安居在南方。
我們的游戲卻不行,因為我需要一個完整的大世界,必須解決南北互通的問題。據我所知國內運營的游戲 EVE 是比較好解決了這個問題的。
我們自己的游戲大多也解決了,只是宣傳上還是鼓勵玩家登陸相應的服務器。我們的解決方案本質上很簡單。建立有多個出口的機房,同時擁有電信和網通的線路。或是用自己的線路互聯(lián)電信和網通的機器。這后者普通用戶自己在家也可以做,只要你肯花錢,同時購買電信的 ADSL 于網通的寬帶即可。目前許多城市兩者都向大眾提供服務。
當然,最終我們還是需要編寫服務器的程序員做一些配合。
早先,我的一組游戲服務器的設計是單臺的連接服務器作為玩家的總入口,再匯集所有信息到心跳服務器,由它轉發(fā)到后面的邏輯服務器組處理。關于這個設計以前寫過篇 blog 。
其實稍微改動一下設計,就能很好的解決多個連接入口的問題。
只需要為每種網絡配置獨立的連接服務器,電信和網通各一臺(或者還需要教育網),同時連入同一臺心跳服務器。數據在心跳服務器匯總。數據包在匯集的時候,為了區(qū)分是哪個外部連接進來的,會被連接服務器編上內部 id 。當有多臺連接服務器時,每臺只需要配置不同的內部 id 掩碼來區(qū)分就夠了。
ps. 早先我們想用連接服務器配置雙網卡的方式來解決這個問題。這幾天反思這樣成本過高。到時候要求每組服務器都有兩條不同的網線接入,部線過于麻煩