2010-11-25 61 views
11

我一直在使用PHP一段時間。我一直在考慮學習node.js以配合它使用非阻塞的想法來創建在線遊戲或應用程序。關於使用這兩者有很多信息。使用節點作爲遊戲後端的一部分可以真正加快遊戲的某些方面,特別是如果遊戲允許用戶實時對戰。像Python一樣,我需要node.js嗎?

那麼,最近我也一直在研究學習python(是的,我有很多時間在我的手上)。有很多關於它的功能,我真的很喜歡它。但是爲了使用node.js來做後臺工作,就像我正在考慮用php一樣,我根本找不到很多信息。我也注意到python確實有一些線程特性。由於我對python的世界還很陌生,我是否還需要python中的node.js? python可以處理node.js可以使用的這些功能嗎?或者還是會有使用節點的好處,還是我實際上需要呢。作爲一個側面說明,因爲我開始尋找Python,我還發現扭曲,這似乎是另一個像節點的框架。但是扭曲是用python編寫的。所以在上述任何一種情況下,扭曲會更好(除了扭曲看起來更長並且比節點更穩定的事實)。我的意思是一般情況下都值得使用,無論是節點還是扭曲。如果是這樣的話,那麼使用python就比另一個更好。

對不起,有很大的問題,但我只是如此不確定和n00b在這方面。謝謝。


所以因爲它的立場,讀有用的答案後,我看到如下選項:1。 PHP + JS 2. Python的+扭曲 3. Python的+睡衣 4的Python +的node.js 5. Node.js的 6.扭曲

  1. 我已經知道PHP和很舒服,和我目前l​​earnign JS。這對我來說是一條可能的路線。但我也從PHP傾向於Python,因爲我喜歡的語言的一般特徵。

  2. 這個選項我認爲可能比#3更合理,使用雙絞線來處理網絡端口以允許玩家與海誓山盟一起玩。

  3. 這只是讓你不必學習JS。對我來說,這似乎不是什麼大不了的事情。我已經開始研究它,並沒有那麼難學。但就像在一個問題中提到的那樣,混合了一些東西;和{}可能會有一些問題。

  4. 贊#2,但與node.js.大多數情況下,我會看到添加節點來處理網絡問題,讓玩家能夠在現場/實時遊戲中玩。而大多數代碼將在Python中。

  5. 唯一的節點,js是一個考慮因素,以及它是單一語言的路線。但它沒有學習和使用python的同樣好處(它是一種通用腳本語言,我可以使用,也可以不使用網頁設計,這是我想學習和使用它的一個重要原因)。

  6. Ans as#5但我沒有考慮一條唯一的路線,直到閱讀評論。雖然看起來似乎合理,但它並不涉及我想學習的兩種語言之一。 Python和節點。

以上似乎是我可以去的主要路線。現在我仍然不確定要走哪條路線。我真的很想學習node和python。所以看來我可能只需要分別學習兩者。但我仍然需要爲這個項目選擇一個選擇。到目前爲止,我喜歡數字2和5.因爲節點和扭曲都有一些非常相似的功能,所以6接近5。和1,因爲這是我已經知道的。但是我想要學習新東西。所以仍然是數字2和5.或者4與2相似。哈哈,我仍然需要做一些作業。也許它值得另一個問題。

編輯(9-19-2012):我只是想更新,說我目前主要使用node.js進行開發。並且計劃使用Redis for PubSub功能來提供實時頁面更新的外觀,因爲我不需要像遊戲中或配對內容編輯中那樣真正實時。

+1

您的觀點6不正確:Twisted *是* Python。 Twisted的重點在於暴露與普通Python API一樣多的事件驅動網絡。 – Glyph 2010-12-05 22:15:53

+0

噢好的。我懂了。我知道它是用python編寫的,但我想我對它的看法有些偏差。 – skift 2010-12-13 22:40:17

+0

值得注意的是,Python是一種語言,Twisted將Python擴展到了網絡,Node.js將Javascript擴展到了網絡。就像你不能在PHP上使用Ruby on Rails一樣(除非你想把很多縫合工作合併成兩個本來不需要的組件),你不能在Node.js中使用Twisted,在Python中使用Node.js。 – TheEnvironmentalist 2014-08-12 16:04:32

回答

9

儘管Python絕對可以用於異步編程,但即使使用Twisted,也不會感到自然,如果您將其與Node.js進行比較,它只是看起來或感覺很好。

既然你打算做一個實時網頁遊戲,你很可能會最終使用WebSockets

的WebSockets是基於HTTP和使用升級頭啓動雙向連接,這意味着,你可以輕鬆地同時擁有正常的服務器您的WebSockets端口80上運行,如果你需要大量的後退支持舊瀏覽器,那麼總是有全能的Socket.IO

取決於你的前端有多複雜,我寧願去與express.js或只是寫我自己的東西。

讓前端和遊戲處於同一個進程中(顯然)有很多優點,您可以獲取大量信息而無需查詢數據庫。

另一個大的「功能」是,你不必在客戶端邏輯和服務器邏輯之間進行上下文切換。這可能起初看起來像是一個小好處,但除了你不會在Python中鍵入;,並且在JS中不要忘記你的{}在兩邊連續工作了幾個小時後,你也可以在服務器和客戶端之間重新使用代碼。再說起來這可能看起來像是一個小小的好處,但好的多玩家遊戲總是在客戶端上運行很多東西,只是爲了彌補滯後,Python和JavaScript在地方也有很大不同,所以不得不重寫JS的部分在Python中需要時間,甚至可能引入錯誤。

(現在到無恥插頭...)

我已經做了2個多人遊戲使用的是Node.js已經,雖然沒有HTTP前端,兩個遊戲運行相當多的JS在客戶端:
Multiplayer Asteroids/Geometry Wars Crossover
RTS Concept (a bit like Eufloria)

此外,雖然JSON似乎伏貼發送瀏覽器和客戶端之間的數據,你很快就會發現,它使用一噸的帶寬,因爲我遇到s AME問題我已經寫節省高達45%交通一些專業圖書館:再次
BiSON.js

,具有服務器客戶端可以讓一個重複使用的代碼,因此節省開發時間上的JavaScript兩者。

所以總結這一切,我會強烈建議去與Node.js的:

  1. 的可複用代碼,上下文切換少,因此更短的開發時間
  2. V8是比Python 很多情況下。
  3. 沒有併發性問題,默認情況下一切都是異步的。
  4. Node.js是下一個重要的事情,現在就開始大行其道。
  5. 它是JavaScript! ;)
+0

是的,兩端同樣的語言是吸引人的。但是使用兩個並不能真正感受到我所能想到的,就像使用JS和PHP一樣。前不久我看了兩個node.js框架,表達和geddy。但是我還沒做很多功課。如果我使用節點,我想使用一個框架,因爲我知道它們可能有多好。 – skift 2010-11-27 09:23:41

2

我不認爲它更好,因爲它是基於Python的Python,但是因爲您可以在Twisted中同時執行遊戲部分中的Web部分。

編輯:

此外,Pyjamas

+0

是的,這與node.js相同,我可以用一種主要語言編碼整個事物,而不是分開服務器和客戶端。我也想學習Python的一些其他功能,PHP沒有。它作爲一般的腳本語言好得多,這就是爲什麼它是我想要的可能路線之一。 – skift 2010-11-27 09:29:13

0

這聽起來像是你在討論讓系統在後臺執行某種處理,你想異步執行。如果是這種情況,你可能會考慮使用某種排隊系統。這樣,您可以將消息放入隊列中,直到它被工作進程池處理。

Celery使得這件事變得相當容易,但是如果您之前沒有做到這一點,取得RabbitMQ(或其他消息代理)正確配置可能會有點痛苦。

1

使用Node.js的全部重點是它的優點,它在http://nodejs.org/#about有詳細記錄。雖然您當然可以使用服務器端語言和前端堆棧來滿足您的需求,但我認爲使用1種語言編寫所有代碼將大大提高生產力。

如果我是你,我會嘗試儘可能用1種語言編寫大部分代碼。所以我認爲你不應該嘗試使用Node.js和Python(Twisted或者Tornado)。它似乎有某種重疊。

想象一下在JavaScript中編寫所有代碼的好處。 ;)

2

如果你喜歡面向回調的編程,twisted和nodejs是你的事情。否則,你可以看看gevent。它與twisted/nodejs相似,因爲它是一個異步框架,但它可以讓您像使用線程方法一樣編寫代碼。

它通過在幕後執行基於協程的魔法來實現這一點。