Php-Flash связь через сокеты

Доброе время суток, уважаемые разработчики!

Я не специалист по сетевому программированию, но случилось так, что я столкнулся с необходимостью разработки сокет-сервера на php (нет возможности использовать Java) для флэш-многопользовательской браузерной игры (стандартные функции, такие как локации, командные баталии и т. Д.).


Основная проблема заключается в том, что TCP является протоколом "точка-точка" и полностью занимает данный порт.

Конечно, можно создать какую-то очередь, которая будет управлять подключениями к сокету, но это решение не кажется наиболее подходящим.

Мне кажется, что использование интервала "честных" портов (например, от 2000 до 2200) является более подходящим решением, потому что выполнение одного запроса может занять много времени, и игроки не будут рады ждать в очереди.

Но как я могу реализовать эту стратегию "портового интервала"? Решения, которые я вижу:

  • запуск php-скрипта для каждого порта (хе-хе, 2 сотни запущенных скриптов!);

  • как-то разветвлять начальный процесс для новых процессов (2 сотни обработанных? Не слишком приятно), по одному на каждый порт;

  • дополнительный цикл while, который прослушивает все порты (выглядит очень плохо);
  • используя многопоточность или что-то в этом роде (проблема в том, что php является однопоточным, насколько я знаю; pcntl?).

Но почему-то мне не нравится ни один из них, или, по крайней мере, я не знаю, как реализовать их наилучшим образом.

Какова наилучшая из существующих стратегий для обработки нескольких запросов от нескольких пользователей за единицу времени без задержек, и как реализовать эту стратегию в php? У нас есть собственный Debian-сервер, поэтому можно использовать любые необходимые расширения php.

Любые советы по разработке, планированию и внедрению таких систем заслуживают всяческого одобрения.

Благодарю вас!


Редактировать 1: Кстати, я забыл упомянуть некоторые дополнительные детали.

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

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

2 ответа

Лучший способ для многопользовательского общения для Flash - RTMP. Ищите FMS или Red5. Это не в php, но я думаю, что это правильный путь.

Другие вопросы по тегам