2011-07-23 70 views
1

我正在計劃一個相對簡單的在線多人遊戲,我很難將玩家用於玩家的通信。PHP AJAX多人遊戲

遊戲細節:

  • 6名球員
  • 聊天室
  • 30秒輪(中場休息)
  • 時間同步是很重要的

玩家選擇和行動,並在年底這個動作被執行,有一個短暫的中止來詳細描述動作,並開始新的一輪。

我決定完全用JS和PHP(當然是AJAX)構建這個遊戲。我只是不知道我應該使用什麼來進行客戶端到客戶端的通信 - 我最初計劃使用mySQL來持續1/2秒的AJAX調用PHP腳本來存儲遊戲/用戶數據,但我恐怕會太慢,不可預測。

我認爲使用類似XML的東西而不是mySQL並使用類似php fopen()函數的東西 - 你們怎麼看待這個問題?

我看過這個問題here,其中海報正在考慮使用XMPP,這可能是一個很好的解決方案嗎?

我應該去插座嗎?對於不需要交換太多數據的遊戲來說,這是必要的嗎?要實現這一目標需要做什麼?

關於同步全天候的任何建議?或者這是我甚至真的需要關注自己的事情?

我願意接受所有建議,並非常感謝任何幫助。

回答

2

去彗星,你不需要插座。彗星是一種反向AJAX。例如,對於像即時通訊軟件這樣的P2P軟件來說,它非常完美,因爲它可以在不需要瀏覽器持續輪詢服務器的情況下將數據推送到瀏覽器。在JS/PHP中有很多Comet實現,只是Google。然後,作爲後端,你可以使用MySQL或XML或任何你想要的(但是我會認爲MySQL是一個更好的解決方案,因爲XML只是一個需要打開,讀取,寫入和關閉以及數據庫被設計的文本文件比這更快)。

+1

回覆:數據庫vs XML - 沒有XML服務器,與本身就是服務器的數據庫不同。這意味着訪問XML文件會出現死鎖,與數據庫不同。 – Christian

+0

這聽起來和我正在尋找的完全一樣,但是,我正在考慮使用jQuery,而且似乎大多數人都在使用Dojo或原型 - 任何建議? – jreed121

+1

@ christian-sciberras yep,這是另一個缺點。 我在2008年使用Prototype來實現Comet。我想jQuery也有類似的工作。 – jacek

2

如果您決定使用PHP/JS/Ajax,那麼我建議您閱讀關於使用PHP usleep()函數來延遲返回ajax調用的結果,直到服務器有話要說。這應該會導致更快的服務器到客戶端通信。

我自己並沒有這樣做,但我認爲基本原則是每個Ajax調用可以延遲5到10秒,每次執行一次新的調用或從服務器返回數據。

此外,我會推薦一個JavaScript框架(例如jQuery),以使ajax調用更易於管理。

+0

謝謝,我會檢查一下。是的,現在jQuery是一個給定的,但我仍然可能會選擇我自己的專門功能集來提高性能,因爲我可能不需要jQuery所提供的所有功能。你對XML和MySQL的看法vs ??? – jreed121

+0

XML vs MySql?他們究竟如何相關? – Christian

0

我也在用JS/PHP構建遊戲,這裏是我的計劃:在服務器上有一個純文本文件。每當用戶執行需要發送給服務器的動作時,它就會向XML腳本發送XMLHttpRequest,該腳本會將動作附加到文件中(例如,如果用戶從邁阿密向莫斯科發射導彈,它會寫入「launch Miami莫斯科「的文件)。要檢查對方什麼時候執行某些操作,可以在另一個PHP腳本上打開XMLHttpRequest,並在PHP腳本返回內容時記錄它返回的內容並重新打開連接。該PHP腳本檢查對該文件的修改,並在文件內容發生更改時返回該文件內容。這裏是檢查更改的PHP文件:

<?php 
#First, set infinite time limit 
set_time_limit(0); 
#record last modification time 
$f1=filemtime('./nameoffile.txt'); 
#wait until the file changes 
while($f1===filemtime('./nameoffile.txt'){ 
    #have a 10,000 microsecond break between each check so you do not use too much resources 
    usleep(10000); 
readfile('./nameoffile.txt'); 
?> 

您可能還想研究HTML5 WebSockets。我不使用它們,也不知道它們是否適用於PHP,但它們看起來很有趣。

+0

Websockets可以使用PHP,但許多主機不允許你打開端口,所以websocet是不允許的。 Websocket在減少延遲方面要好得多,許多遊戲如http://slither.io和http://agar.io都使用WS – dGRAMOP