我是否需要Python中的node.js,就像使用PHP一样?

我一直在使用PHP一段时间。 而且我一直在考虑学习node.js以配合使用非阻塞的想法来创build在线游戏或应用程序。 有两个一起使用这两个相当多的信息。 使用节点作为游戏后端的一部分可以真正加快游戏的某些方面,特别是如果游戏允许用户实时地相互对战。

那么最近我也一直在研究python(是的,我有很多时间在我手上)。 有很多关于它的function,我真的很喜欢。 但是为了使用node.js来做后台工作,就像我正在考虑用php一样,我根本找不到很多信息。 我也注意到python确实有一些线程特性。 由于我对python的世界还很陌生,我甚至需要python中的node.js吗? python可以处理node.js可以使用的这些特性吗? 或者还是会有利用节点,或者我真的需要它。

作为一个侧面说明,因为我开始查找Python,我也发现扭曲,这似乎是另一个框架像节点。 但是,扭曲是用python编写的。 所以在上述任何一种情况下,扭曲会更好(除了扭曲看起来更长,比节点更稳定的事实)。 我的意思是,一般来说,它是值得使用的,无论是节点还是扭曲。 如果是这样的话,那么一个比Python更好。

对不起,这个大问题,但我只是如此不确定,在这方面n00b。 谢谢。


因此,在阅读有用的答案后,我看到以下选项:1. PHP + JS 2. Python + Twisted 3. Python +睡衣4. Python + node.js 5. Node.js 6. Twisted

  1. 我已经知道PHP,并且对它感到满意,现在正在学习JS。 这对我来说是一条可能的路线。 但是我也从PHP到Python,因为我喜欢的语言的一般特征。

  2. 我认为这个select可能比#3更合理,使用扭曲来处理networking端口以允许玩家与对方一起玩。

  3. 这只是让你不必学习JS。 对我来说,这似乎不是什么大不了的事情。 我已经开始学习了,不难学。 但是就像在一个问题中提到的那样,把事情混在一起, 和{}可能会有一些问题。

  4. 像#2,但与node.js. 大多数情况下,我会看到添加节点来处理networking方面,让玩家能够在现场/实时游戏中玩。 而大部分的代码将在Python中。

  5. 唯一的节点,js是一个考虑,以及它是单一语言的路线。 但它没有学习和使用Python的同样好处(它是一种通用的脚本语言,我可以使用,也可以不使用网页devise,这是我想学习和使用它的一个重要原因)。

  6. 答案作为#5,但我没有考虑一个唯一的路线,直到阅读评论。 虽然看起来似乎有道理,但它并不涉及我想学习的两种语言之一。 Python和节点。

以上似乎是我可以走的主要路线。 现在我还不确定要走哪条路。 我真的想学习节点和Python。 所以看来我可能只需要分别学习两个。 但是我仍然需要为这个项目select一个select。 到目前为止,我喜欢数字2和5. 6接近5,因为节点和扭曲有一些非常相似的function。 和1,因为这是我已经知道的。 但是我想要学习新东西。 所以仍然是2号和5号。或者4号和2号相似。哈哈,我还需要做一些功课。 也许它值得另一个问题。

编辑(9-19-2012):我只是想更新,说我目前主要使用node.js进行开发。 并计划使用Redis的PubSubfunction来给出实时页面更新的外观,因为我不需要在游戏中或配对内容编辑中的真实时间。

尽pipePython绝对可以用于asynchronous编程,但即使使用Twisted,也不会感到自然,如果将其与Node.js进行比较,它看起来并不好看。

既然你打算做一个实时的networking游戏,你很可能会最终使用WebSockets 。

WebSockets基于HTTP,并使用升级头来启动双向连接,这意味着,如果您需要大量的回退以支持较旧的浏览器,则可以轻松地将普通服务器 WebSockets都运行在端口80上,那么总是有全能的Socket.IO 。

根据前端的复杂程度,我宁愿selectexpress.js,或者只写自己的东西。

将前端和游戏放在同一个进程中(显然)具有很多优点,您可以在不需要查询数据库的情况下获取大量信息。

另一个大的“function”是,你不必在客户端逻辑和服务器逻辑之间进行上下文切换。 这可能起初看起来像一个小好处,但除了你不会键入的事实, 在Python中,不要忘了你的JS在连续工作了几个小时之后,你也可以在服务器和客户端之间重新使用代码。 再说起来,这可能看起来像一个小好处,但好的多玩家游戏总是在客户端上运行很多东西,只是为了弥补滞后,Python和JavaScript是不同的地方,所以不得不重新编写部分的JS在Python中需要时间,甚至可能引入错误。

(现在到无耻的插头…)

我已经用Node.js完成了2个多人游戏,虽然没有HTTP前端,但是两个游戏在客户端上运行了很多JS:
多人小行星/几何战争交叉
RTS Concept(有点像Eufloria)

而且,尽pipeJSON似乎完全适合在浏览器和客户端之间发送数据,但您很快就会发现它使用了大量的带宽,因为我遇到了同样的问题,我写了一些专门的库,可以节省高达45%交通:
BiSON.js

同样,在服务器客户端上同时使用JavaScript,可以重新使用代码,从而节省开发时间。

所以总结一下,我强烈build议去Node.js:

  1. 可重复使用的代码,减less上下文切换,缩短开发时间
  2. 在许多情况下,V8比Python
  3. 没有并发问题,一切都是默认的asynchronous。
  4. Node.js是下一个重要的东西,现在就跳上行列。
  5. 这是JavaScript! ;)

我不认为这是更好的,因为它是Python上的Python,但是因为你可以在Twisted中同时执行游戏部分 Web部分。

编辑:

另外, 睡衣 。

如果你喜欢面向callback的编程,twisted和nodejs是你的事情。 否则,你可以看看gevent 。 它类似于twisted / nodejs,因为它是一个asynchronous框架,但它允许你编写代码,就像你在一个线程方法中做的那样。

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

使用Node.js的全部重点是在http://nodejs.org/#about上详细logging的优点。 虽然您可以使用服务器端语言和前端堆栈来满足您的需求,但我认为使用1种语言编写所有代码将会大大提高生产力。

如果我是你,我会尝试尽可能用1种语言编写大部分代码。 所以我不认为你应该尝试与Python(扭曲或龙卷风)一起使用Node.js。 它似乎有某种重叠。

试想一下在JavaScript中编写所有代码的好处。 ;)

这听起来像你正在谈论的是有一个系统在你想要asynchronous做背景做某种处理。 如果是这种情况,你可以考虑使用某种排队系统。 这样,您可以将消息放入队列,直到它被工作进程池处理。

Celery使得这件事变得相当容易,但如果你以前没有这样做,那么获得RabbitMQ(或其他消息代理)的正确configuration可能会有点痛苦。