2010-11-25 2 views
11

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

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

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

Извините за большой вопрос, но им просто так неуверенно и n00b в этой области. Благодарю.


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

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

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

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

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

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

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

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

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

+1

Ваша точка 6 неверна: Twisted * is * Python. Вся суть Twisted заключается в том, что в качестве ориентированного на события сетевого взаимодействия можно использовать простые API-интерфейсы Python. – Glyph 2010-12-05 22:15:53

+0

О, хорошо. Понимаю. Я знал, что это написанный питон, но я думаю, что мой взгляд на него слегка исказился. – skift 2010-12-13 22:40:17

+0

Стоит отметить, что Python - это язык, Twisted расширяет Python до сети, а Node.js расширяет Javascript в Интернете.Точно так же, как вы не можете использовать Ruby on Rails с PHP (если вы не хотите вставлять много прошивки для объединения двух компонентов, которые никогда не должны были быть), вы не можете использовать Twisted с Node.js, t используйте Node.js с Python. – TheEnvironmentalist 2014-08-12 16:04:32

ответ

9

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

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

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

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

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

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

(Теперь на бесстыдный вилок ...)

Я сделал 2 мульти игру игрока с Node.js уже, хотя не имеет HTTP переднего конца обе игры работают довольно много JS на клиенте:
Multiplayer Asteroids/Geometry Wars Crossover
RTS Concept (a bit like Eufloria)

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

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

Так суммировать все это, я бы настоятельно рекомендую идти с Node.js:

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

Да, тот же язык на обоих концах привлекателен. Но использование двух не очень хорошо воспринимает меня, как та же идея, что и использование JS с PHP. Недавно я посмотрел на две из фреймворков node.js, express и geddy. Но я не сделал много домашних заданий. И если я использую узел, я бы хотел использовать фреймворк, поскольку я знаю, насколько он полезен. – skift 2010-11-27 09:23:41

2

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

EDIT:

Также Pyjamas.

+0

Да, тот же самый вывод node.js состоит в том, что я могу кодировать все это на одном основном языке, а не отдельно от сервера и клиента. Я также хочу изучить python для некоторых других его функций, которые php не имеет. Это намного лучше, чем общий язык сценариев, поэтому он является одним из возможных путей, которые я хотел бы принять. – skift 2010-11-27 09:29:13

0

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

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

1

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

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

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

2

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

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

Смежные вопросы