2011-04-15 147 views
6

我注意到我厭倦了嘗試使用OpenTK等高級編程語言(如C#)製作遊戲。 C或C++劇照看起來有點超出我的謙虛自我。我只是突然想要回到一些網頁開發,並嘗試做一個瀏覽器遊戲 - 當然純HTML5 + JS!HTML5 + Javascript:網絡遊戲

雖然我想我早晚可以通過ze internetz的幫助弄清楚畫布,但我不太清楚應該如何處理網絡。

WebSockets看起來很有趣,但他們是否正確的路要走,看到他們仍然相當不發達? AJAX聽起來有點慢並且笨重。我不打算製作需要非常低延遲的遊戲,但我確實希望保持足夠低的水平以便順利播放。

你會建議什麼?

回答

1

我會建議Ajax。使用HTML5和JavaScript在線遊戲進行聯網的關鍵是儘量減少到服務器的流量(與其他任何Web應用程序一樣),所以您只需找到一種方法即可。你有什麼類型的遊戲?它是否嚴格需要連續的互聯網連接?

即便如此,Ajax既不緩慢也不笨重。它與任何桌面遊戲中的任何其他互聯網連接一樣快。

+0

我以前用Ajax做過一些事情 - 沒有任何庫。我認爲最大的問題是,我必須排隊等待事件發送給客戶,一旦他請求他們,將他的行爲附加到該請求。它不**感覺**正確。 – copyboy 2011-04-15 12:56:40

+0

Ajax IS比其他連接要慢,因爲即使您發送的數據量最小,當您執行Ajax請求時,也會帶來所有HTTP開銷。當您將數據從客戶端發送到服務器時,這是正確的。 Ajax與其他任何東西一樣快的唯一方法就是Ajax流式處理(從服務器到客戶端)。 – HoLyVieR 2011-04-15 14:27:20

+0

它可能會慢一些,但速度並不慢。 – Ryan 2011-04-15 19:19:34

2

也許你可能會讀到更多不同的optionsGoogle將爲您提供研究材料。

根據服務器/客戶端之間交換的數據量,socket.io似乎足夠多達10個更新/秒,最多可容納100個人。不過,即使Javascript會引入大量開銷,使用C++創建網絡代碼的人仍然會抱怨連接性和速度問題,即使使用高度特定的方法(數據打包,tcp/ip數據包緩存等)也是如此。

2

如果你想留下來,只有HTML5,WebSocket的是一個非常有趣的技術,特別是如果你需要你的數據,以儘可能快的移動。這是唯一可以讓你在服務器上雙向傳輸數據的技術。如果您的遊戲只要可用,就不需要更新Ajax就足夠了。

另外你還需要問自己你想支持你的遊戲的瀏覽器。所有瀏覽器都不支持WebSocket。

如果您打開其他選項,則可以在瀏覽器中使用RTMFP in Flash進行P2P連接。這允許您直接執行所有「客戶端到客戶端」的通信,而不是通過服務器傳遞數據。它在Flash中,但是it's possible to bridge that functionnality,這樣你就可以在Javascript中擁有所有的應用程序邏輯。這項技術可以傳遞更多的數據,而不會使服務器過載,但是大的缺點是支持。 Flash在Unix平臺上支持不好,它是第三方插件。

+0

呵呵,說實話,我不太清楚爲什麼你的答案是上升的而不是其他的。我明確表示我想要尋求一種純粹的解決方案,否則它不會包含許多我不知道的信息。沒有冒犯,這不是一個錯誤的答案,我只是認爲其他答案更有幫助。 – copyboy 2011-04-15 12:50:21

+0

@copyboy如果你認爲另一個對你更有幫助的人,你可以接受其中的一個。這就是接受答案的原因。 – HoLyVieR 2011-04-15 14:21:10

+0

@copyboy如果你認爲其他答案更有幫助,那麼喬布斯說:「你做錯了」。越早掌握NodeJS和Socket.io越好。 – PaulM 2011-04-18 00:08:44

3

如果延遲不是一個大問題,那麼你應該使用許多優秀的AJAX/long-poll庫中的一個。

WebSockets將爲您提供最低延遲的瀏覽器通信。 WebSocket實際上相當通用,因爲它們是一個WebSocket Flash仿真器web-socket-js,如果沒有找到本地WebSocket支持,它可以自動加載。使用web-socket-js仿真將比本地WebSocket具有更高的延遲,但仍低於AJAX/long-poll。

就WebSockets可用性而言,Chrome和Safari支持本地WebSocket(版本03)。版本03也支持Firefox 4.0和Opera 11,但默認情況下是禁用的。自4.2版起,WebSockets本身也支持iOS。我在HyBi(WebSockets)工作組,並且解決了Mozilla和Opera的安全問題的協議的下一個迭代變得非常接近。 Mozilla和Opera正在積極研究實現,所以我預計最遲他們的下一個主要版本將默認打開WebSockets。但即便如此,Flash後備和iOS支持,WebSockets現在幾乎無處不在。

如果你願意在Javascript服務器端也做,那麼我會推薦Socket.IO。它是一個node.js後端加上一個客戶端JS庫。如果瀏覽器支持它,它默認爲WebSocket,包含web-socket-js Flash後備,如果WebSockets連接由於某種原因不起作用(或者您選擇禁用WebSocket作爲傳輸),則可以使用長輪詢。

+1

去nodejs和socket.io是前進的方向。 – PaulM 2011-04-18 00:07:37

1

對於您可能想要嘗試使用現有框架(如聯合平臺)的網絡代碼。這裏是用純JS/HTML5的WebSockets沒有多用戶的繪圖應用程序:

http://www.unionplatform.com/?page_id=2762

也值得看www.socket.io。 socket.io提供了一個帶有xhr故障轉移的原始websocket包裝器,但沒有更高級別的apis(例如,沒有房間,沒有用戶,沒有帳戶,沒有數據共享/管理等分數等事情)。

colin