Як обробити мультиплеєра в JavaScript?


12

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

В даний час це більше експерименту, тому на даний момент, єдине, про що повинні знати гравці, - це інші Гравці.

Якщо це був типовий веб-додаток, а не гра, він би просто постійно запитував HTTP-запити, але оскільки це гра, продуктивність та точність будуть проблемою.

Через те, що гра націлена на кілька телефонних платформ, скажемо, що клієнт буде написаний на JavaScript або в рамках, заснованому на JavaScript. Технологія сервера повністю відкрита.

Кожному гравцеві потрібно буде зробити еквівалент повідомлення HTTP та отримати лише використання більш швидкого протоколу. Причина того, що мультиплеєр працює на веб-сторінках, полягає в тому, що мультиплеєр через Bluetooth або іншу локальну мережу буде занадто різноманітним на всіх платформах і може спричинити проблеми.

Тож питання зводиться до того, який хороший протокол / технологію використовувати для багатокористувацького JavaScript? Будь-яка порада на стороні сервера чи це має значення? З якоїсь причини я повинен відмовитись від цієї дворівневої архітектури та перейти до прямого зв'язку між телефоном?

Відповіді:


15

Вам потрібно кращий протокол зв'язку, ніж HTTP. Ви, мабуть, хочете UDP або TCP. У веб-переглядачах немає можливості спілкуватися з UDP, тому ваш єдиний вибір - TCP.

Для TCP ви хочете використовувати WebSocket , однак підтримка браузера нестабільна у веб-розетках.

Це означає, що вам потрібно використовувати техніку COMET для емуляції TCP, одна популярна емуляція - це веб-розетка, вбудована у флеш-додаток.

Socket.IO - це бібліотека (для node.js ), яка підтримує веб-розетки та імітує їх відповідним резервним вмістом у невідповідних веб-браузерах (використовує флеш та інші методи COMET).

Для багатокористувацьких ігор JavaScript я рекомендував би використовувати socket.io та node.js


1
Ось зразок гри в реальному часі, зробленої за допомогою HTML5 та WebSockets: rawkets.com . Вихідний код доступний тут: github.com/robhawkes/rawkets
Elisée

1
Ось два більше прикладів
Raynos

4

І питання, і прийнята відповідь були опубліковані в 2011 році, і час з часу змінився :)

Веб-розетки досить поширені, але ще кращою технологією є WebRTC, яка дозволяє отримати ненадійні потоки UDP. Це набагато, набагато краще для ігор.

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

<shameless self promotion>

Я один з оригінальних розробників lance.gg , багатокористувацького ігрового сервера / бібліотеки на базі node.js, де ми вирішили багато згаданих проблем (та багато інших!). Наша мета - полегшити розробку багатокористувацьких ігор розробникам ігор JavasScript. Я гаряче запрошую вас використовувати його як вихідну точку для створення своєї гри.

</shameless self promotion>


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