2014-11-21 27 views
0

服務器由多個用戶交互的服務組成:配置文件,遊戲邏輯,物理。MMO中的多個服務連接vs內部路由

我聽說有多個客戶端連接到同一臺服務器是一種不好的做法。

我不知道我是否會使用UDP或TCP。

服務是實時的,他們應該儘可能快地回覆,所以如果沒有真正重要的原因,我不想包含任何額外的重新路由。那麼在我的情況下,是否有任何理由將通過一個外部端點服務的流量重新寫入特定的內部服務?

回答

0

這似乎是一個包中的多個問題。我會嘗試回答那些可以識別爲單獨的...

UDP vs TCP:你說的是「實時」,這通常意味着UDP是正確的選擇。但是,這意味着必須處理丟失的數據包和可能的數據包重新排序。但是,使用UDP會讓一些可能的延遲減少技巧打開。

從單個客戶端到單個服務器的多個連接:這會在客戶端(可能是可忽略的)和服務器(可能是可能是可忽略的問題)上消耗資源(端點,因爲它)。將單獨連接用於單獨關注點(配置文件,物理...)的優點是,當您需要將這些連接分離到單獨的服務器(或服務器場)時,您不需要更新客戶端,只需要連接到其他端點,使用已經測試過的代碼。

需要「重新路由器」(或「負載平衡器」):最初可能不會成爲問題。但是,它可能會在稍後成爲問題。根據您的整體設計和服務器操作系統,使用UDP實際上可能成爲一項資產。 UDP數據包到達負載均衡器,分派到右後端,然後理論上可以用負載均衡器的源IP發送迴應。

另一種方法是擁有「會話代理」。客戶端與一個知名端點建立了初始連接,他說:「我是一個客戶端,告訴我我的個人資料,物理服務器,哪些服務器在哪裏」,代理商考慮當前負載,可能是客戶端的位置和其他可能有意義的事情,然後客戶自己連接到相關的後端。這樣做的不利之處在於,當正在進行的會話轉移到新的後端時,難度更大(並非不可能,但更困難),而當負載平衡器處於這種狀態時,這可以基本上透明地完成。

+0

1.「UDP vs TCP」 - 在我的情況下,我沒有機會利用不可靠的數據發送,所以我選擇了TCP,我的問題不在於此。當然,我希望能夠單獨運行服務器。但是,我應該重新路由還是隻能讓客戶端直接連接? 3.但是**爲什麼需要**「負載平衡器」?原因是什麼? – Vlad 2014-12-21 14:42:48

+0

@vlad我已經擴展了它。在這個問題中,你明確地說UDP和TCP「不知道」,所以我認爲值得指出的是,TCP確實不適合接近實時的任何事情(通常,「無信息」的差距是比丟包造成的冗餘延遲更好,並在重發之前發生以下超時)。 – Vatine 2014-12-21 15:42:03

+0

「會話代理」解決方案有什麼缺點嗎?這似乎是最好的選擇。 – Vlad 2014-12-21 16:45:28