2017-06-18 23 views
1

這是一種情況。假設我正在爲瀏覽器構建一個在線2人遊戲,其中一個目標是爲這兩個玩家產生一些東西(一個對象)在屏幕上的同一個地點並使其沿線性軌跡行進與相同的速度。最好是實施「服務器打勾」,它可以移動對象(或對象),使瀏覽器的作業成爲作業。我明白將它留給瀏覽器的不好的含義,但我也擔心服務器上的大負載或其他問題。關於如何通常實施的任何想法?在線多人遊戲中常見的「嘀嗒」怎麼辦?

+1

你不能有客戶,如果這個協調你期望所有的客戶ts會看到同樣的事情。不同的連接速度和加載時間會導致它失敗。給客戶這樣的責任也可能是危險的,因爲客戶的信息可以很容易地被他們操縱。向客戶端提供來自服務器的數據副本,以便它們不能破解這些值。 – Carcigenicate

+0

謝謝,這是我最初的想法,但是確保服務器上每個客戶端都能夠很好地滿足客戶數量的增長? 編輯:技術是使用nodejs的網絡套接字 – user6754277

+0

我沒有寫過任何超出簡單玩具的任何服務器/客戶端遊戲,所以我不能回答這個問題。一般的規則是對客戶給你的任何數據都不信任,並且有能力改變。假設你有客戶每隔幾毫秒更新一次軌跡。任何具有任何編碼知識的人都可以打開開發人員工具,找到更新功能,並將其更改爲自己想要的任何內容。如果他們阻止對象移動,你能相信他們提供的關於他們與對象交互的任何數據嗎? – Carcigenicate

回答

3

在概念上,有三種方法來實現這一目標:

  • 純服務器端模式
  • 純客戶端模式
  • 混合模式

讓我們看到了幾個細節他們每個人。

enter image description here enter image description here enter image description here

將此應用於在三種不同模式的情況下,將意味着:

  • 在純服務器端模式,您發送的軌跡的座標,實時到兩個瀏覽器。每個瀏覽器只接收座標並在接收到的位置顯示對象。你可以看到這種方法的一個實例。使用兩種不同的瀏覽器轉到http://push.lightstreamer.com/,並在右下角演示中移動角色。角色和球的所有動作由服務器決定,協調座標,並實時廣播給所有客戶。在純粹的客戶端模式中,您將共享一個初始的世界狀態,然後每個瀏覽器將計算它自己的世界進化,並有可能的分歧。

  • 在混合模式下,瀏覽器在純客戶端模式下執行自己的計算,但是它們會定期通過低頻率服務器端廣播進行同步。所以,物理運行在服務器端和客戶端。

最簡單的解決方案是純服務器端模式,它在非複雜的情況下是完美的。爲了使其具有可擴展性並能夠容忍網絡延遲,您需要一個特定的服務器,就像這些演示中所用的服務器[完全公開:我參與了此類服務器]

要獲得更多詳細信息,可以查看一些資源我在過去準備: