我已经使用PHP一段时间了。我一直在考虑学习Node.js以使用非阻塞的想法来创建在线游戏或应用程序。将两者结合使用有很多信息。使用Node作为游戏后端的一部分可以真正加速游戏的某些方面,特别是如果游戏允许用户实时互相对战。
好吧,最近我一直在研究学习Python(是的,我手上有很多时间)。 PHP上有许多关于它的功能,我非常喜欢。但是为了使用Node.js来完成我考虑使用PHP的后台工作,我根本找不到太多信息。我也注意到Python确实有一些线程功能。由于我对Python的世界还很陌生,我甚至需要Python中的Node.js吗? Python可以处理Node.js可以使用的这些功能吗?或者使用Node仍然会有好处,或者我实际上是不是 需要 它。
作为旁注,自从我开始查找Python以来,我还发现了Twisted,它似乎是另一个像Node这样的框架。但是Twisted是用Python编写的。因此,在上述任何一种情况下,Twisted都会更好(除了Twisted看起来更长并且比Node更稳定的事实)。我只是意味着它总是值得使用,无论是Node还是Twisted?如果是这样的话比Python更好吗?
对不起,这是一个很大的问题,但我在这个领域非常不确定和n00b。谢谢。
因此,在阅读有用的答案后,我看到以下选项:
- PHP + JS
- Python + Twisted
- Python +睡衣
- Python + Node.js
- Node.js的
- 扭曲
我已经了解PHP并且对此感到满意,目前正在学习JS。这对我来说是一条重要的可能途径。但是我也倾向于从PHP到Python,因为我喜欢的语言的一般功能。
我认为这个选项可能比#3更合理,使用Twisted来处理网络端口以允许玩家互相玩游戏。
这只是让你不必学习JS,这对我来说似乎不是那么大的交易。我已经开始研究它了,并不难学。但就像在一个问题中提到的那样,混合一些东西;和{}可能会有一些问题。
像#2一样,但是有Node.js.大多数情况下,我看到添加Node来处理网络方面,让玩家能够在实时/即时游戏中玩游戏。而且大部分代码都是Python。
Sole Node.js是一个考虑因素,它也是单一语言路线。但是学习和使用Python也没有相同的好处(它是我可以使用的通用脚本语言,也不是网页设计。我想学习和使用它的一个重要原因。)。
Ans作为#5,但在阅读评论之前,我没有考虑使用Twisted路线。虽然看起来似乎有道理,但它并不真正涉及我想要学习的两种语言之一,Python和Node。
以上似乎是我可以走的主要路线。现在我还不确定要走哪条路。我真的想学习Node和Python。所以我似乎只需要分别学习这两个。但我仍然需要为这个项目选择一个选择。到目前为止,我喜欢数字2和5,其中6接近5,因为Node和Twisted有一些非常相似的功能。 1提到因为这是我已经知道的。但我还是想要学习新东西。所以,真的是数字2和5.或4,因为它类似于2.哈,我仍然需要做一些功课。也许这值得另一个问题。
编辑(2012年9月19日):我只想更新,说我目前主要使用Node.js进行开发。并计划使用Redis for PubSub功能来提供实时页面更新的外观,因为我不需要像游戏或配对内容编辑那样真正的实时。
虽然Python绝对可以用于异步编程,但是即使使用Twisted也不会感觉很自然,如果你将它与Node.js进行比较它只是看起来或感觉不到 那 不错。
由于你正在计划进行实时网络游戏,你最有可能最终会使用 的WebSockets。
WebSockets基于HTTP并使用升级标头启动双向连接,这意味着您可以轻松拥有正常的服务器 和 您的WebSockets在端口80上运行,如果您需要大量的后备来支持较旧的浏览器,那么总是全能的 Socket.IO。
根据您的前端的复杂程度,我宁愿选择 express.js 或者只是写我自己的东西。
让前端和游戏都在同一个进程中(显然)有很多优点,你可以获取大量信息而无需查询数据库。
另一个重要的“功能”是,您不必在客户端逻辑和服务器逻辑之间进行上下文切换。这可能看起来像一个小的好处,但除了你不会打字的事实 ;
在Python中,不要忘记你的 {}
在JS连续工作几个小时之后,你也可以在服务器和客户端之间重用代码。再一次,这可能看起来像一个小的好处,但好的多玩家游戏总是在客户端运行很多东西,只是为了弥补滞后,Python和JavaScript是完全不同的,所以不得不重写JS的部分在Python中需要时间,甚至可能会引入错误。
(现在对无耻的插头......)
我已经用Node.js完成了2个多人游戏,虽然没有HTTP前端两个游戏在客户端上运行了很多JS:
多人小行星/几何战争交叉
RTS概念(有点像Eufloria)
此外,虽然JSON似乎非常适合在浏览器和客户端之间发送数据,但您很快就会发现它使用了 一吨 带宽,因为我遇到了同样的问题,我写了一些专门的库,节省了 45%
交通:
BiSON.js
再次,在服务器上同时使用JavaScript 和 客户端允许重复使用代码,从而节省开发时间。
总而言之,我强烈建议使用Node.js:
- 可重复使用的代码,更少的上下文切换因此缩短了开发时间
- V8是 更快 在很多情况下比Python。
- 没有并发问题,默认情况下一切都是异步的。
- Node.js是下一个重要的事情,现在就加入潮流。
- 这是JavaScript! ;)
我认为它不是那么好,因为它是Python-on-Python,但因为你可以同时做两个游戏部分 和 Twisted中的Web部件。
编辑:
也, 睡衣。
如果你喜欢面向回调的编程,那么twisted和nodejs就是你的选择。否则,你可以看看 GEVENT。它类似于twisted / nodejs,因为它是一个异步框架,但它允许您像在线程方法中那样编写代码。
它通过在幕后进行基于协同程序的魔术来实现这一目标。
使用Node.js的全部意义在于它的优点,并且有很好的文档记录 http://nodejs.org/#about。虽然您可以使用服务器端语言和前端堆栈来满足您的需求,但我认为用1种语言编写所有代码将大大提高生产力。
如果我是你,我会尝试尽可能多地用一种语言编写我的大部分代码。所以我认为你不应该尝试将Node.js与Python(Twisted或Tornado)一起使用。它似乎有某种重叠。
想象一下用JavaScript编写所有代码的酷感。 ;)
听起来像你在谈论有一个系统来在后台进行某种处理,你想要异步进行。如果是这种情况,您可以考虑使用某种排队系统。这样,您可以将消息放入队列,直到它被工作进程池处理。
芹菜 使这很容易做到,但如果你以前没有这样做,那么正确配置RabbitMQ(或其他消息代理)可能会有点痛苦。