2010-11-12 48 views
4

具體來說,如何實現多人部分?我一直在玩跳棋,以鍛鍊我的JS/PHP/AJAX肌肉,並且讓它對一個人(或同一臺計算機上的兩個人)工作得非常好。但是在兩臺不同計算機上的兩個人之間工作時,我有點沮喪。我已經關閉了AJAX部分,並且服務器正在接收/發送來自/去往瀏覽器的移動。我無法將自己的頭圍繞在我需要做的下一步,以結合第二名球員。如何實現多人遊戲瀏覽器?

對於像這樣簡單的事情,我需要MySQL嗎?我可以使用一些球員的會話ID組合來傳遞來回移動,而不是存儲任何信息服務器端?這兩個獨立實體之間如何開始遊戲?

對不起,如果這個問題是無知的,但我真的不確定如何從這一點着手。爲了澄清,肯定有一個涉及的服務器(因此PHP/AJAX參考)。這對我來說很明顯。 「移動」顯然需要從玩家A到服務器,然後到玩家B.這是我如何畫空白。話雖如此,下面似乎有一些很好的答案,我會依次對它們進行調查。但隨時可以繼續添加可能的建議/解決方案,因爲我已經從基礎研究中學到了很多東西,並已經發布了答案。

回答

0

直接回答所問的問題:您確實需要某種服務器端的「全局存儲」,因爲每個會話都是獨立的,彼此不認識。

您可以在ASP中使用文本文件,數據庫或內存存儲,它被稱爲緩存或應用程序級別變量,對PHP不瞭解。

+0

我選擇了這個答案,因爲這是幫助我跨越障礙的原因。使用這個PHP應用程序變量腳本。 – ggutenberg 2010-11-13 17:06:29

1

我建議去Comet

+0

彗星是很老... – alexy13 2010-11-12 01:20:52

+1

@ alexy13 - 這樣嗎? HTTPSocket並不是普遍支持的,所以OP將100%需要使用Comet,除非他想使用Flash。對一般問題的一般答案+1。 – 2010-11-12 01:31:11

1

您可以重新調整其中一個聊天系統,例如jabber,並創建一個聊天室的等同位置,在該聊天室中接收郵件並將其重新發送給所有連接的客戶端。這是實時方面和排序發揮作用的地方。由於跳棋的基礎很簡單,您可以在瀏覽器中使用標準Jabber服務器和Javascript chat client。除了遊戲移動之外,這還會讓您的玩家實際上在同一輛公交車上互相發送消息。

+0

將一臺優秀的XMPP服務器與一臺BOSH客戶端連接起來也是我做這件事的方式。 ejabberd和strophe.js將是我的選擇。 – 2010-11-12 09:56:01

0

我以前想過的一種技術(但從來沒有實現過)是實際上在所有玩家之間共享相同的PHP會話(使用session_id),但根據IP地址($_SERVER['REMOTE_ADDR'])區分它們。這樣,您可以將所有遊戲狀態存儲在同一個會話中,並且特定於玩家的數據可以存儲在按IP地址鍵入的陣列中。

當然,您需要一個單獨的渠道來分配會話ID。這可以用不同的方式來完成:

  1. 私人遊戲:給會話ID的遊戲主機,讓他/她將其分發給誰願意加入遊戲
  2. 公共遊戲的朋友:使用數據庫來存儲的活動性遊戲會話ID和允許任何人加入
0
  • ,如果你想保持播放器/用戶信息(這應該是顯而易見的)使用的數據庫。
  • 如果是基於會話的,您肯定需要一臺服務器。
  • 對於客戶端我建議像Silverlight或Flash等等。

  • 對於類似聊天室的體驗,您可以讓每個客戶端連接到服務器,以便偵聽推送通知(這可以防止任何類型的手動「輪詢」服務器進行更新)。我知道這是直接支持最新的Silverlight和WCF技術。

0

請結帳Jaxl(/ Jabber的XMPP庫中PHP JS)BOSH MUC Chat room樣品的例子。你可以很容易地擴展這個範例來開發基於瀏覽器的使用PHP/JS的多玩家遊戲。