Нужен ли мне Node.js в Python, как с PHP? - PullRequest
11 голосов
/ 25 ноября 2010

Я уже давно использую PHP. И я думал о том, чтобы научиться Node.js соглашаться с ним, чтобы использовать неблокирующую идею для создания онлайн-игры или приложения. Существует довольно много информации об использовании двух вместе. Использование Node в качестве части серверной части игры может реально ускорить некоторые аспекты игры, особенно если игра позволяет пользователям играть друг против друга в режиме реального времени.

Ну, в последнее время я также изучал Python (да, у меня много времени в моих руках). В PHP есть много возможностей, которые мне действительно нравятся. Но для использования Node.js для выполнения фоновой работы, как я рассматривал с PHP, я не могу найти много информации вообще. Я также заметил, что в Python есть некоторые функции потоков. Поскольку я все еще очень новичок в мире Python, понадобится ли мне даже Node.js в Python? Может ли Python обрабатывать такие функции, как Node.js? Или все еще будут преимущества использования Node, или мне действительно нужно это.

В качестве примечания, с тех пор, как я начал искать Python, я также обнаружил Twisted, который, похоже, является еще одним фреймворком, таким как Node. Но Twisted написан на Python. Таким образом, в любом из вышеперечисленных случаев Twisted был бы лучше (кроме того факта, что Twisted, кажется, вышел дольше и более стабилен, чем Node). Я просто имею в виду, стоит ли вообще использовать Node или Twisted? И если так, то один лучше, чем другой с Python?

Извините за большой вопрос, но я просто так не уверен и n00b в этой области. Спасибо.


Итак, прочитав полезные ответы, я вижу следующие варианты:

  1. PHP + JS
  2. Python + Витая
  3. Питон + пижама
  4. Python + Node.js
  5. Node.js
  6. Витая

  1. Я уже знаю PHP и чувствую себя комфортно с ним, и в настоящее время изучаю JS. Это был главный возможный маршрут для меня. Но я также склонялся от PHP к Python, потому что в целом мне нравились особенности языка.

  2. Этот вариант, я подумал, может быть более вероятным, чем # 3, используя Twisted для управления сетевым портом, чтобы позволить игроку играть вживую друг с другом.

  3. Это просто делает так, что вам не нужно изучать JS, что для меня не так уж важно. Я уже начал изучать это, и это не так сложно учиться. Но как было упомянуто в вопросе, смешивая такие вещи, как; и {} потенциально может иметь некоторые проблемы.

  4. Как и # 2, но с Node.js. В основном я вижу добавление Node для управления сетевыми аспектами, чтобы позволить игрокам играть в живую игру / игру в реальном времени. И большая часть кода будет на Python.

  5. Рассматривался только Sole Node.js, а также маршрут на одном языке. Но он не имеет таких же преимуществ в изучении и использовании Python (это общий язык сценариев, который я могу использовать как в веб-дизайне, так и вне его. Большая причина, по которой я хотел его изучить и использовать).

  6. Ответ # 5, но я не рассматривал единственный витой маршрут до прочтения комментариев. Хотя это кажется правдоподобным, на самом деле это не касается одного из двух языков, которые я хочу изучать, Python и Node.

Вышеперечисленное кажется основным маршрутом, по которому я могу идти. Теперь я все еще не совсем уверен, по какому пути идти. Я действительно хочу выучить как Node, так и Python. Так что, кажется, мне просто нужно изучить их по отдельности. Но мне все еще нужно выбрать выбор для этого проекта. И до сих пор мне нравятся числа 2 и 5, с 6 близко к 5, так как Node и Twisted имеют очень похожую функциональность. И 1 в качестве упоминания, потому что это то, что я уже знаю. Но я все равно хотел узнать что-то новое. Тем не менее, на самом деле числа 2 и 5. Или 4, как это похоже на 2. Ха, мне все еще нужно сделать домашнее задание. Может быть, это заслуживает другого вопроса.

РЕДАКТИРОВАТЬ (9-19-2012): Я просто хотел обновить, чтобы сказать, что я в основном использую Node.js в настоящее время для разработки.И планируйте использовать функциональность Redis for PubSub для отображения обновлений страниц в реальном времени, поскольку мне не нужно настоящее время в реальном времени, как в играх или при редактировании парного контента.

Ответы [ 5 ]

9 голосов
/ 25 ноября 2010

Хотя Python определенно можно использовать для асинхронного программирования, он не выглядит естественным, даже с Twisted, если сравнить его с Node.js, он просто не выглядит или не чувствует , что приятно.

Поскольку вы планируете делать веб-игру в реальном времени, вы, скорее всего, в конечном итоге будете использовать WebSockets .

WebSockets основаны на HTTP и используютОбновите заголовок, чтобы инициировать двунаправленное соединение, это означает, что вы можете легко использовать как обычный сервер , так и , чтобы ваши WebSockets работали на порте 80, если вам нужно много запасных вариантов для поддержки старых браузеров, тогдавсегда есть всемогущий Socket.IO .

В зависимости от сложности вашего внешнего интерфейса, я бы предпочел пойти с express.js или просто написать свой собственныйstuff.

Наличие как внешнего интерфейса, так и игры в одном и том же процессе имеет (очевидно) множество преимуществ, вы можете получить много информации без необходимости запрашивать базу данных.

Anotее большая «особенность» заключается в том, что вам не нужно переключаться между логикой клиента и логикой сервера.Поначалу это может показаться небольшим преимуществом, но помимо того факта, что вы не наберете ; в Python и не забудете свой {} в JS после непрерывной работы с обеими сторонами в течение нескольких часов, вытакже сможет повторно использовать код между сервером и клиентом.Опять же, на первый взгляд это может показаться небольшим преимуществом, но в хороших многопользовательских играх на клиенте всегда много работы, просто чтобы компенсировать отставание, также Python и JavaScript сильно отличаются друг от друга, поэтому приходится переписывать части JSв Python требует времени и может даже вводить ошибки.

(Теперь о бесстыдных штекерах ...)

Я провел 2 многопользовательские игры с Node.JS уже есть, хотя у него нет HTTP-интерфейса. Обе игры запускают на клиенте довольно много JS:
Многопользовательские астероиды / Geometry Wars Crossover
RTS Concept (немного похоже на Eufloria)

Кроме того, хотя JSON, кажется, идеально подходит для передачи данных между браузером и клиентом, вы скоро обнаружите, что он использует тонну полосы пропускания, поскольку я столкнулся сту же проблему я написал в какой-то специализированной библиотеке, которая экономит до 45% трафика:
BiSON.js

Опять-таки, наличие JavaScript на сервере и Клиnt позволяет повторно использовать код и, следовательно, сэкономить время разработки.

Итак, чтобы подвести итог, я настоятельно рекомендую перейти к Node.js:

  1. Повторно используемый код,меньшее переключение контекста, следовательно, более короткое время разработки
  2. V8 во многих случаях быстрее , чем Python.
  3. Нет проблем параллелизма, по умолчанию все асинхронно.
  4. Node.js - следующая большая вещь, прыгайте на подножку.
  5. Это JavaScript!;)
2 голосов
/ 26 ноября 2010

Если вам нравится программирование, ориентированное на обратный вызов, то Twisted и nodejs - это то, что вам нужно. В противном случае вы можете взглянуть на gevent . Он похож на twisted / nodejs в том, что это асинхронный фреймворк, но он позволяет вам писать код так же, как вы это делали бы в многопоточном подходе.

Это достигается за счет магии на основе сопрограмм за кулисами.

2 голосов
/ 25 ноября 2010

Не думаю, что это так хорошо, потому что это Python-on-Python, а потому что вы можете выполнять как игровую часть , так и веб-часть в Twisted. РЕДАКТИРОВАТЬ:

Кроме того, Пижама .

1 голос
/ 26 ноября 2010

Смысл использования Node.js заключается в его сильных сторонах, которые хорошо документированы на http://nodejs.org/#about.. Хотя вы, безусловно, можете использовать серверный язык и стек интерфейса для своих нужд, я думаю, что писать весь код в 1язык будет огромным повышением производительности.

на вашем месте я постараюсь написать как можно больше кода на одном языке.Поэтому я не думаю, что вы должны пытаться использовать Node.js вместе с Python (Twisted или Tornado).Кажется, что это имеет некоторое перекрытие.

Просто представьте, как здорово писать весь ваш код на JavaScript.;)

0 голосов
/ 25 ноября 2010

Мне кажется, что вы говорите о наличии системы для какой-то обработки в фоновом режиме, которую вы хотите выполнять асинхронно.Если это так, вы можете рассмотреть возможность использования какой-либо системы очередей.Таким образом, вы можете поместить сообщение в очередь до тех пор, пока оно не будет обработано пулом рабочих процессов.

Celery делает это довольно легко, но получая RabbitMQ (или другого брокера сообщений)Правильно настроенная конфигурация может быть немного болезненной, если вы не сделали этого раньше.

...