Я працюю на загальному ігровому сервері, який керує іграми для довільної кількості клієнтів, розіграних в сокеті TCP, що грають у гру. У мене "дизайн" зламаний разом із клейкою стрічкою, яка працює, але здається і крихкою, і негнучкою. Чи існує чітко встановлена схема, як написати надійну та гнучку комунікацію між клієнтом та сервером? (Якщо ні, як би ви покращили те, що я маю нижче?)
Приблизно у мене таке:
- Під час налаштування гри на сервері є одна нитка для кожного гнізда гнізда, що обробляє синхронні запити клієнта та відповіді від сервера.
- Однак, коли гра відбудеться, всі теми, за винятком одного сну, і цей потік проходить по всіх гравців по одному, повідомляючи про їх рух (у зворотному запиті-відповіді).
Ось схема того, що я маю на даний момент; натисніть для збільшення / читабелішої версії або 66 КБ у форматі PDF .
Проблеми:
- Він вимагає, щоб гравці відповідали точно по черзі точно правильним повідомленням. (Я думаю, я міг би дозволити кожному гравцеві відповісти випадковим лайном і рухатись лише після того, як вони дадуть мені дійсний хід.)
- Це не дозволяє гравцям спілкуватися з сервером, якщо не настала їх черга. (Я міг би сервер надсилати їм оновлення про інших гравців, але не обробляти асинхронний запит.)
Заключні вимоги:
Продуктивність не є першорядною. Це в основному буде використовуватися для ігор в режимі реального часу, і, головним чином, для того, щоб виконувати AI один проти одного, а не посмикуватися.
Гра завжди буде покрокова (навіть при дуже високій роздільній здатності). Кожен гравець завжди обробляє один хід, перш ніж усі інші гравці отримають поворот.
Реалізація сервера буває в Ruby, якщо це має значення.