我在Python中是否需要Node.js,就像在PHP中一样?
我已经使用PHP一段时间了。最近我在考虑学习Node.js,想用它来实现非阻塞的想法,创建一个在线游戏或应用。关于这两者一起使用的信息还挺多的。把Node作为游戏的后端部分,可以加快游戏的某些方面,特别是如果游戏允许用户实时对战的话。
最近我也在考虑学习Python(是的,我有很多时间)。我发现Python有很多我喜欢的功能,比PHP要好。不过,关于如何用Node.js做背景工作,我找不到太多信息。我还注意到Python确实有一些线程功能。由于我对Python还很陌生,我真的需要在Python中使用Node.js吗?Python能处理Node.js能做的这些功能吗?或者使用Node.js还有其他好处,或者我真的需要它吗?
顺便提一下,自从我开始了解Python,我还发现了Twisted,这似乎是一个类似Node的框架,但它是用Python写的。那么在上述两种情况下,Twisted会更好吗(除了Twisted似乎比Node更成熟、更稳定)?我只是想知道,使用Node或Twisted是否值得?如果值得的话,哪一个在Python中更好呢?
抱歉问了这么大的问题,我在这个领域真的很不确定,还是个新手。谢谢。
所以,经过阅读有帮助的回答后,我看到以下选项:
- PHP + JS
- Python + Twisted
- Python + PyJamas
- Python + Node.js
- Node.js
- Twisted
我已经知道PHP,并且对它很熟悉,现在正在学习JS。这是我一个主要的选择。但我也在考虑从PHP转向Python,因为我喜欢这个语言的一般特性。
我觉得这个选项比第三个更可行,使用Twisted来处理网络端口,让玩家能够实时对战。
这个选项让你不必学习JS,对我来说这并不是太大的问题。我已经开始学习JS了,发现其实不难。不过,正如问题中提到的,混合使用像;和{}可能会有一些问题。
和第二个选项类似,但用Node.js。主要是我看到Node可以处理网络方面,让玩家能够在实时游戏中对战。大部分代码会用Python写。
单独使用Node.js也是一个考虑,因为这是单一语言的选择。但它没有学习和使用Python的好处(Python是我可以在网页设计内外使用的一种通用脚本语言。这也是我想学习和使用它的一个重要原因)。
和第五个选项类似,但在阅读评论之前我并没有考虑只用Twisted。虽然看起来可行,但这并不涉及我想学习的两种语言,Python和Node。
以上似乎是我可以走的主要路线。现在我还是不太确定该走哪条路。我真的想学习Node和Python。所以看起来我可能需要分别学习这两者。不过我还是需要为这个项目做出选择。目前我比较喜欢第二和第五个选项,第六个选项也接近第五,因为Node和Twisted有一些非常相似的功能。第一项提一下,因为这是我已经知道的。但我还是想学点新东西。所以现在,主要是第二和第五,或者第四,因为它和第二相似。哈哈,我还需要做一些功课。也许这值得再问一个问题。
编辑(2012年9月19日):我想更新一下,告诉大家我目前主要在使用Node.js进行开发。并计划使用Redis来实现PubSub功能,以提供实时页面更新的效果,因为我并不需要像游戏那样的真正实时,或者像配对内容编辑那样的实时。
5 个回答
如果你喜欢用回调函数来编程,那么 twisted 和 nodejs 就非常适合你。否则,你可以看看 gevent。它和 twisted/nodejs 一样,都是异步框架,但它让你可以像写多线程代码那样来写你的代码。
它通过在后台使用协程的方式来实现这一点,感觉就像是有魔法一样。
虽然Python可以用来做异步编程,但和Node.js比起来,它的感觉就不那么自然了,甚至用上了Twisted也一样。
既然你打算做一个实时的网页游戏,你很可能会用到WebSockets。
WebSockets是基于HTTP的,它通过升级头来建立双向连接。这意味着你可以轻松地让普通的服务器和WebSockets都在80端口上运行。如果你需要支持一些老旧的浏览器,那就可以考虑强大的Socket.IO。
根据你前端的复杂程度,我更倾向于使用express.js,或者自己写一些东西。
把前端和游戏放在同一个进程中显然有很多好处,你可以获取很多信息,而不需要每次都去查询数据库。
另一个很大的“特点”是,你不需要在客户端逻辑和服务器逻辑之间切换。起初这看起来是个小好处,但除了你在Python中不需要输入;
,在JS中也不会忘记{}
,在两边工作几个小时后,你还可以在服务器和客户端之间重用代码。虽然这看起来也不算什么,但好的多人游戏总是在客户端运行很多东西,以弥补延迟。而且Python和JavaScript的差异很大,所以在Python中重写JS的部分会花费时间,甚至可能引入bug。
(接下来是我的自我推销...)
我已经用Node.js做过两个多人游戏,虽然它们没有HTTP前端,但这两个游戏在客户端运行了很多JS:
多人版小行星/几何战争交叉游戏
RTS概念(有点像Eufloria)
另外,虽然JSON看起来很适合在浏览器和客户端之间传输数据,但你很快会发现它消耗了大量带宽。因为我遇到了同样的问题,所以写了一个专门的库,节省了多达45%
的流量:
BiSON.js
再次强调,服务器和客户端都用JavaScript可以重用代码,从而节省开发时间。
所以总结一下,我强烈建议使用Node.js:
- 可重用的代码,减少上下文切换,因此开发时间更短
- 在很多情况下,V8比Python要快。
- 没有并发问题,一切默认都是异步的。
- Node.js是下一个大趋势,赶紧加入吧。
- 它是JavaScript! ;)