2010-11-25 71 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相似,因为它是一个异步框架,但它可以让您像使用线程方法一样编写代码。

它通过在幕后执行基于协程的魔法来实现这一点。