Javascript та PHP для багатокористувацького реального часу? [зачинено]


13

Мені цікаво, чи поєднання Javascript clientide з PHP / mysql сервером є хорошою ідеєю для багатокористувацьких ігор браузера в режимі реального часу HTML5 (невеликого масштабу)?

Мої технічні знання дуже обмежені, і хоча я планую вивчити node.js в майбутньому, крива навчання зараз досить величезна.

Оскільки я вже знайомий з PHP, я відчуваю, що став би функціонувати набагато швидше.

Я вважаю, що на той час є 2-8 гравців. І намагаються звести кількість повідомлень клієнта до сервера якомога менше.

Значення, які я маю намір зберігати / обробляти:

  • Ім'я гравця та ідентифікатор.
  • X і Y положення.
  • Здоров'я.
  • Обладнані елементи (максимум 8 слотів, напевно, менше).
  • Дії (ходьба, атака, використання тощо, але одночасно лише одна дія / гравець).
  • Кулі X, Y координати і траєкторія.
  • Назва гільдії / клана
  • І деякі основні функції чату / розсилки.

Я здогадуюсь, навіть якщо це не найкраще рішення, але, наскільки я тримаю логіку невеликою, це цілком можливо. Я правий?


4
Звучить бездоганно. Чому б просто не спробувати? Найгірше - ви витрачаєте деякий час на навчання, найкращий випадок, отримуєте саме те, що хочете.
Вільям Маріагер

1
Так, але я думаю, що це потребує певного часу, створюючи, і мені не подобається витрачати час, тому я тут і запитав. =)
юстотернотербіст

8
Якщо ви щось дізнаєтесь, час не витрачався даремно. ;) Щось варто враховувати, якщо ви переключите мову, ви витратите час на вивчення нової мови та навчання мереж одночасно, що означає набагато більше налагодження, щоб знайти, де ви пішли не так. Якщо ви будете дотримуватися того, що знаєте, спершу ви навчитесь налагодженню роботи з мережею, а потім зможете надіслати її, якщо виявиться неефективною, а наступного разу, коли хтось задасть подібне запитання, ви дізнаєтесь правильну відповідь, оскільки ви її протестували.
Вільям Маріагер

1
Це насправді гарний момент
юстотернотербіст

Відповіді:


12

Для гри в реальному часі потрібно мінімізувати затримку. Ось дві поради щодо її досягнення з примітками про PHP та Node:

  1. Використовуйте WebSockets. Вони дозволяють швидкий двосторонній зв'язок між сервером і клієнтом. Використання тут node.js має перевагу в тому, що ви можете використовувати один і той же API JavaScript на обох кінцях труби. Існує також чудовий модуль socket.io для node.js, який забезпечує резервні технології для менших браузерів, які не підтримують WebSockets. Трохи погугливши, здається, ви також можете використовувати WebSockets від PHP, якщо дуже хочете.
  2. Не залучайте базу даних до критично важливих для часу даних, таких як координати об'єктів, що швидко рухаються. Це означає, що зберігати їх у пам’яті, що не особливо добре підходить для традиційної моделі використання PHP, щоб вона була запущена один раз для кожного запиту на апаш (або будь-який веб-сервер), але ви можете запустити додаток для сервера PHP також як окремий. Я б здогадався, що Node зі своїм ядром V8 буде швидше, ніж PHP . Чи це питання, залежить від того, наскільки вашою є гра та наскільки потужним є сервер.

Я сам знаходжу node.js дуже легко підібрати, і оскільки вам все одно доведеться кодувати трохи JavaScript, рекомендую спробувати. Принаймні, швидко погляньте на підручники socket.io, щоб побачити, наскільки тривіально налаштувати канал зв’язку в реальному часі.


+1 за балом 2. Найбільшою помилкою, яку ви можете зробити з цим, є очікування запуску запитів MySQL для кожної події. Все, що ви можете зробити для переміщення ігрових даних з жорсткого диска, допоможе. Я мав успіх із зловживанням Memcached для цього. Безсумнівно, є й інші способи.
DampeS8N

Так, я дуже хочу вивчити вузол, але мені ще доводиться його починати навіть з cmd, найбільшою помилкою, яку зробили розробники, було зробити так важко потрапити в нього. Принаймні зараз версія Windows поставляється з інсталятором, я можу спробувати, якщо я знайду хороший підручник.
юстотернотербіст

Вузол зовсім не важко запустити або використовувати. Так важче, ніж PHP, але PHP платить жахливу ціну за свою зручність - дизайн, який дозволяє вбудовувати його в Apache і за замовчуванням скрізь без конфігурації, також спричиняє безліч проблем, які роблять PHP абсолютно і найгіршим вибором може зробити для гри в реальному часі ігор. Node, Python, Ruby, Java та ін. Вимагають налаштування сервера додатків, але саме ця модель дозволяє дуже масштабувати обробку пам'яті, керовану подіями, чого практично неможливо досягти в PHP.
Sean Middleditch

1

Поряд з відповіддю Tapio, я хотів би запропонувати лише (якщо можливо) надсилати на сервер введення користувача (клацання та введення клавіатури), причому сервер і клієнт емілюють гру. Кожен N тик клієнт попросить сервер синхронізувати, і сервер відповість усією інформацією, необхідній клієнтові для надання гри, наприклад, здоров'я, предметів тощо. Це потрібно для того, щоб клієнт теж не десинхронізувався багато.

Звичайно, і сервер, і клієнт повинні мати точно однакову реалізацію гри, так що це може бути трохи більше роботи. Якщо у вас є ідеальні реалізації як для клієнта, так і для сервера, клієнту доведеться синхронізувати рідше.

Це зменшить обмін повідомленнями клієнт / сервер і зменшить затримку. Це також допоможе запобігти обману.

Якщо припустити, що ви створюєте цю гру в JavaScript, можливо, варто написати резервний і в JavaScript, використовуючи NodeJS. Таким чином ви можете повторно використовувати реалізацію JavaScript для вашої гри як для сервера, так і для клієнта.


0

Я рекомендую вивчити Nodejs. Якщо у вас вже є Javascript, це буде не так складно. Я швидко зробив гру для багатокористувацької гри TRON з Nodejs, і це був перший день її використання. (О, і клієнт був полотном HTML5; я надсилав лише ключові дані, як згадувалося в інших коментарях.)

Погляньте на модуль під назвою nowjs. Удачі!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.