2010-03-04 36 views
11

我有一年的編寫客戶端代碼的經驗,但沒有與服務器的東西。我想限制這個問題,所以我會簡化我想要達到的目標。服務器編程 - 簡單的多人遊戲 - 哪種協議和技術?

我想編寫服務器代碼,使兩個客戶端(瀏覽器或iPhone/Android)可以連接,當兩個玩家連接時,他們看到一個計時器倒數爲零。時鐘將在服務器上同步,客戶端將被唯一標識。

這裏的問題在於連接這個詞,人們用於多人遊戲的是什麼?打開雙向通信的TCP套接字?你可以告訴我不確定我在說什麼。我希望使用AppEngine,但我不確定它是否合適,因爲它是基於請求的。

我有一些Java的經驗,儘管Erlang聽起來像是最好的選擇,但這只是我想玩的東西,並且快速推出,所以Java會更容易。我只需要知道連接播放器等

感謝的最好方式,

GAV株系

回答

7

我建議我們認爲桌面和移動系統作爲平等的客戶。那麼什麼選擇?

  • 你寫一個socket服務器,它將接受來自客戶端的連接。但是,您還需要爲桌面和移動操作系統編寫一些套接字客戶端,甚至是2個。用戶將不得不安裝這個客戶端。

  • 您啓動了一個Web服務器(無論您喜歡哪種技術)。它將公開一些Web服務,這些服務可以同時訪問桌面和客戶端操作系統。但仍然需要編寫一個客戶端應用程序(再次2x)。

  • 您運行一個Web服務器,並通過標準的HTTP協議使所有功能都可訪問。這樣你甚至不需要客戶端 - 幾乎每個桌面或移動操作系統都至少安裝了一些網絡瀏覽器。 JavaScript將提供您的股票行情的動態更新。

+0

謝謝很好地回答了一個含糊不清的問題 - Socket編程是最適用的是我想達到它的出現,你的回答給我的關鍵字做更多的研究。 – gav 2010-03-05 13:54:21

+0

在這種情況下,Javascript可以並應該被視爲其他客戶端的客戶端。 – 2013-10-10 01:23:42

1

我絕不是在網絡通信方面的專家,但如果你不介意失去了幾包(或軟件錯誤檢查),你想快,瘦肉通信可以使用UDP。我認爲大多數時間敏感的數據程序和流媒體都使用這種協議來避免延遲並保持數據包的大小。

1

幾年前,我用java和ServerSocket(http://java.sun.com/j2se/1.4.2/docs/api/java/net/ServerSocket.html)實現了一個客戶端/服務器應用程序。你也有一個SSL版本。

所以你創建一個ServerSocket並等待連接。當客戶端連接時,您將創建一個線程,該線程將使用您制定的協議與該客戶端進行討論。

http://www.developer.com/java/ent/article.php/1356891/A-PatternFramework-for-ClientServer-Programming-in-Java.htm

如果發現這個微架構:

http://www.bablokb.de/jcs/jcs.html

其中一個最難的事情是創建協議,以瞭解如何創建一個將瞭解如何工作的好方法FTP(或HTTP ...)。

1

你是正確的J2EE模式打破了近實時或者多玩家的需求。 migth希望考慮RedDwarf遊戲服務器項目。它適用於遊戲Servlets爲商業邏輯做什麼,並且是開源的。

http://www.reddwarfserver.org

我建議我們認爲桌面和移動 系統,等於客戶。 然後呢?

RedDwarf有一個可插拔的trabsport層,可以支持任何你想要的客戶端。

Web服務器非常適合網絡型應用程序。如果你的遊戲就像一個網絡page--並不多用戶,是基於轉,演變非常slowly--然後Web服務器是一個很好的chocie。

但如果不是這樣,你需要的東西在技術上有點比較強大。

哦,什麼它的價值,whetevr你做什麼,如果你想從頭開始寫一個服務器,則不要使用「的ServerSocket。」每個連接需要一個線程,永遠不會縮放。使用NIO或使用像Netty這樣的NIO framewoprk。

+0

鏈接是死的,這裏是GitHub的鏈接:https://github.com/reddwarf-nextgen/reddwarf – 2013-08-03 10:42:20