Нужно ли мне node.js в Python, как я бы с PHP?

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

Хорошо, в последнее время я также изучал изучение python (да, у меня много времени на руки). Есть много особенностей об этом по php, которые мне очень нравятся. Но для использования node.js для работы фона, как я рассматривал с php, я не могу найти много информации вообще. Я также заметил, что у python есть некоторые функции потоковой передачи. Поскольку я все еще очень новичок в мире питонов, мне даже понадобится node.js в python? Может ли python обрабатывать такие функции, которые node.js могут? Или будет ли еще польза от использования node, или мне это действительно нужно.

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

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


Итак, прочитав полезные ответы, я вижу следующие варианты: 1. PHP + JS 2. Python + Twisted 3. Питон Python + 4. Python + node.js 5. node.js 6. Скрученный

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

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

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

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

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

  • Ans как # 5, но я не рассматривал только твист-маршрут, пока не прочитал комментарии. в то время как это кажется правдоподобным, он действительно не включает один из двух языков, которые я хочу изучить. Python и node.

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

EDIT (9-19-2012): Я просто хотел обновить, чтобы сказать, что я использую в основном node.js в настоящее время для разработки. И планируйте использование Redis для функций PubSub, чтобы обеспечить появление обновлений в режиме реального времени, поскольку мне не нужно настоящее время в реальном времени, как в играх, или в парном редактировании контента.

Ответ 1

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

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

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

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

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

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

(Теперь о бесстыдных плагинах...)

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

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

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

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

  • Повторяемый код, меньше переключения контекста, поэтому более короткое время разработки
  • Во многих случаях V8 быстрее, чем Python.
  • Нет concurrency проблем, все по умолчанию асинхронизируются.
  • Node.js - это следующая большая вещь, сейчас прыгайте на подножку.
  • Это JavaScript!;)

Ответ 2

Я так не думаю, что это лучше, потому что это Python-on-Python, но потому, что вы можете сделать как часть игры, так и веб-часть в Twisted.

EDIT:

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

Ответ 3

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

Он достигает этого, выполняя манеру, основанную на сопрограммах, за кулисами.

Ответ 4

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

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

Представьте себе, что вы пишете весь свой код в JavaScript.;)

Ответ 5

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

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