2010-11-25 14 views
11

He estado usando PHP desde hace un tiempo. Y he estado pensando en aprender node.js para usar la idea de no bloqueo para crear un juego o aplicación en línea. Hay bastante información sobre el uso de los dos juntos. Usar el nodo como parte del back-end de un juego realmente podría acelerar algunos aspectos del juego, especialmente si el juego permite a los usuarios jugar uno contra el otro en tiempo real.¿Necesito node.js en Python como lo haría con PHP?

Bueno, últimamente también he estado buscando aprender Python (sí, tengo mucho tiempo en mis manos). Hay muchas características sobre php que realmente me gustan. Pero para el uso de node.js para hacer el trabajo de fondo como lo estaba considerando con php, no puedo encontrar mucha información. También noté que Python tiene algunas características de subprocesamiento. Como todavía soy muy nuevo en el mundo de las pitones, ¿necesitaría node.js en Python? ¿Puede Python manejar este tipo de características que node.js puede? ¿O todavía habría beneficios para usar el nodo, o lo haría realmente necesito él.

Como nota al margen, desde que comencé a buscar python, también descubrí twisted que parece ser otro framework como node. Pero retorcido está escrito en python. Por lo tanto, en cualquiera de los casos anteriores se retorcería mejor (aparte del hecho de que el retorcido parece haber salido más tiempo y es más estable que el nodo). Me refiero en general a que vale la pena usarlo, ya sea nodo o retorcido. Y si es así, uno es mejor que el otro con Python.

Disculpe la gran pregunta, pero estoy tan inseguro y n00b en esta área. Gracias.


Así como está, después de leer las respuestas votos, veo las siguientes opciones: 1. PHP + JS 2. Python + Twisted 3. Python + pijamas 4. Python + Node.js 5. Node.js 6. Twisted

  1. ya sé PHP y estoy cómodo con él, y estoy actualmente learnign JS. Esta fue una gran ruta posible para mí. Pero también me estaba alejando de PHP a Python porque las características generales del lenguaje me gustaban.

  2. Esta opción pensé que podría ser más verosímil que la # 3, usando un giro para manejar el puerto de red para permitir que el reproductor toque en vivo entre sí.

  3. Esto lo hace para que no tenga que aprender JS. Para mí, no parece un gran negocio. Ya comencé a estudiarlo y no es tan difícil de aprender. Pero como se mencionó en una pregunta, mezclar cosas como; y {} podría tener algunos problemas.

  4. Me gusta # 2, pero con node.js. Sobre todo, veo la adición de un nodo para manejar el aspecto de la red para que los jugadores puedan jugar en un juego en vivo/en tiempo real. Y la mayoría del código estaría en python.

  5. El nodo único, js fue una consideración, así como es la ruta de un solo idioma. Pero tampoco tiene los mismos beneficios de aprender y usar python (es un lenguaje de scripting general en el que puedo usar y fuera del diseño web. Una gran razón por la que quería aprender y usarlo).

  6. Resp. Como # 5 pero no estaba considerando una ruta única hasta que haya leído los comentarios. si bien parece plausible, realmente no involucra uno de los dos idiomas que quiero aprender. Python y nodo.

Los anteriores parecen ser las principales rutas que puedo tomar. Ahora todavía no estoy seguro de qué ruta tomar. Realmente quiero aprender tanto nodo como python. Entonces parece que solo necesito aprender los dos por separado. Pero aún tengo que elegir una opción para este proyecto. Y hasta ahora me gustan los números 2 y 5. Con 6 un número cercano a 5, dado que el nodo y el trenzado tienen una funcionalidad muy similar. y 1 como una mención porque eso es lo que ya sé. Pero quería aprender algo nuevo de todos modos. Así que aún así, realmente los números 2 y 5. O 4, ya que es similar a 2. Ja, todavía tengo que hacer algunos deberes. Tal vez merece otra pregunta.

EDITAR (9-19-2012): Solo quería actualizar, decir que actualmente estoy utilizando principalmente node.js para el desarrollo. Y planeo usar Redis para la funcionalidad PubSub para dar la apariencia de actualizaciones de páginas en tiempo real, ya que no necesito el verdadero tiempo real como en los juegos, o en la edición de contenido emparejado.

+1

Su punto 6 es incorrecto: Twisted * is * Python. El objetivo de Twisted es exponer todo lo relacionado con los eventos de red como las API simples de Python. – Glyph

+0

Oh, está bien. Ya veo. Sabía que estaba escrito en python, pero supongo que mi opinión estaba un poco sesgada. – skift

+0

Vale la pena señalar que Python es un lenguaje, Twisted extiende Python a la web y Node.js extiende Javascript a la web.Al igual que no puedes usar Ruby on Rails con PHP (a menos que quieras poner muchas puntadas para combinar dos componentes que nunca fueron), no puedes usar Twisted with Node.js, y puedes ' t usa Node.js con Python. – TheEnvironmentalist

Respuesta

9

Si bien Python definitivamente se puede usar para programación asincrónica, no se siente natural, incluso con Twisted, si se compara con Node.js, simplemente no se ve ni se siente que es bueno.

Dado que estás planeando hacer un juego web en tiempo real, lo más probable es que termines usando WebSockets.

WebSockets están basadas en HTTP y el uso de la cabecera de actualización para iniciar la conexión bidireccional, es decir, que se puede tener fácilmente tanto su normal del servidor y sus WebSockets se ejecutan en el puerto 80, si necesita una gran cantidad de retrocede para dar soporte a navegadores antiguos, luego siempre está el omnipotente Socket.IO.

Dependiendo de lo complicado que sea su front-end, preferiría ir con express.js o simplemente escribir mis propias cosas.

Tener el front-end y el juego en el mismo proceso tiene (obviamente) muchas ventajas, puede obtener mucha información sin la necesidad de tener que consultar la base de datos.

Otra gran "característica" es que no tiene que cambiar de contexto entre la lógica del cliente y la lógica del servidor. Eso podría parecer un pequeño beneficio al principio, pero además del hecho de que no va a escribir ; en Python y no olvide su {} en JS después de haber trabajado continuamente en ambos lados durante un par de horas, también podrá para reutilizar el código entre el Servidor y el Cliente.Nuevamente, eso podría parecer un pequeño beneficio al principio, pero los buenos juegos multijugador siempre generan muchas cosas en el cliente, solo para compensar el retraso, también Python y JavaScript son bastante diferentes en su lugar, por lo que tienen que volver a escribir porciones de JS en Python lleva tiempo e incluso puede introducir errores.

(Ahora a los enchufes desvergonzados ...)

he hecho 2 juegos multi jugador con Node.js ya, aunque el no tener delante HTTP finalizar ambas juegos funcionan mucho de JS en el cliente:
Multiplayer Asteroids/Geometry Wars Crossover
RTS Concept (a bit like Eufloria)

Asimismo, si bien JSON parece encajar perfectamente para el envío de los datos entre el navegador y el cliente, pronto se dará cuenta de que utiliza una tonelada de ancho de banda, ya que me encontré el s AME problema que he escrito alguna biblioteca especializada, que ahorra hasta un 45% tráfico:
BiSON.js

Una vez más, tener JavaScript tanto en el servidor y el cliente permite una reutilización de código y por lo tanto ahorrar tiempo de desarrollo.

Así que para resumir todo esto me habría sugieren fuertemente que ir con Node.js:

  1. código re-utilizable, menos el cambio de contexto, por tanto, más corto el tiempo de desarrollo
  2. V8 es más rápido en que Python muchos casos.
  3. No hay problemas de concurrencia, todo es asincrónico por defecto.
  4. Node.js es la próxima gran cosa, súbete al carro ahora.
  5. ¡Es JavaScript! ;)
+0

Sí, el mismo idioma en ambos extremos es atractivo. Pero usar dos no me parece realmente tan exagerado, ya que es la misma idea que usar JS con PHP. No hace mucho tiempo examiné dos de los frameworks node.js, express y geddy. Pero tampoco he hecho demasiada tarea en ninguno de los dos. Y si uso un nodo, me gustaría usar un framework porque sé lo beneficiosos que pueden ser. – skift

+0

Además, en lo que respecta a BiSON, esto me recuerda a mongodb, que usa un JSON binario. Que me gustaría utilizar para el desarrollo. Así que no estoy seguro de cómo eso encajaría en la mezcla con BiSON. De nuevo, como mencioné antes, todavía tengo tareas para hacer. – skift

+0

@luckysmack Hay un par de alikes JSON "binarios" diferentes, no sé exactamente qué usa Mongo, pero supongo que usan uno que no se enfoca en ser pequeño, sino más bien rápido para leer. El JSON normal no es lo mejor que se puede tener con respecto a la velocidad de lectura, por lo que si se hace con uno binario y se agrega información adicional, se obtendrá un gran aumento de velocidad. –

2

No creo que sea mejor porque es Python-on-Python, sino porque puedes hacer tanto la parte del juego como la parte web en Twisted.

EDIT:

Además, Pyjamas.

+0

Sí, ese es el mismo atractivo de node.js, es que puedo codificar todo en un idioma principal en lugar de separar el servidor y el lado del cliente. También quiero aprender Python para algunas de sus otras características que php no tiene. Es mucho mejor como lenguaje de scripting general, por lo que es una de las rutas posibles que quería tomar. – skift

0

Me parece que estás hablando de tener un sistema para hacer algún tipo de procesamiento en segundo plano que quieras hacer de forma asincrónica. Si ese es el caso, podría considerar el uso de algún tipo de sistema de cola. De esta forma, puede colocar un mensaje en la cola hasta que sea procesado por un grupo de procesos de trabajo.

Celery hace esto bastante fácil de hacer, pero conseguir RabbitMQ (u otro intermediario de mensajes) configurado correctamente podría ser un poco molesto si no lo has hecho antes.

1

El objetivo de utilizar Node.js es su punto fuerte que está bien documentado en http://nodejs.org/#about. Si bien puede usar un lenguaje de servidor y una pila de frontend para sus necesidades, creo que escribir todo el código en 1 idioma supondrá un gran aumento de la productividad.

si yo fuera usted, intentaré escribir la mayor parte de mi código en 1 idioma tanto como sea posible. Así que no creo que deba intentar usar Node.js junto con Python (Twisted o Tornado). Parece tener algún tipo de superposición.

Solo imagina la frialdad de escribir todo tu código en JavaScript. ;)

+0

¿Cuándo se convirtió javascript en un lenguaje genial? Personalmente, lo odio, especialmente el tipeo 'todo es una cuerda/flotación'. Y el mecanismo de herencia. Y el manejo ligeramente diferente en cada navegador. Los marcos ayudan mucho, pero aún así el lenguaje permanece podrido :) Si solo fuera posible, escribiría Python tanto en el servidor como en el lado del cliente. – wump

2

Si te gusta la programación orientada a la devolución de llamada, twisted y nodejs son lo adecuado para ti. De lo contrario, podría echar un vistazo al gevent. Es similar a twisted/nodejs en el sentido de que es un marco asíncrono, pero le permite escribir código como lo haría en un enfoque enhebrado.

Lo logra haciendo magia basada en coroutines detrás de escena.

+0

gevent y Twisted no son comparables de esta manera. Twisted es una biblioteca de programación en red altamente funcional, además de una biblioteca para escribir programas basados ​​en eventos. gevent tiene pocas funciones de programación de red y solo un resumen de un sistema de programación basado en eventos. Básicamente es ** solo ** un envoltorio de co-rutinas (y si te gustan las co-rutinas, puedes encontrar cosas similares que realmente están integradas en Twisted). –

Cuestiones relacionadas