Я хотел бы выполнить некоторые задания онлайн-игроков для двух команд, которые регистрируются в течение нескольких минут. Каждый игрок всегда должен видеть текущий список игроков.
Наилучшим вариантом, вероятно, будут веб-сокеты или отправленные сервером события, но оба они недоступны в IE / Edge.
В качестве замены я думаю о сигнальном «событии» механизма:
- Всякий раз, когда регистрируется новый игрок, его информация, включая pid скрипта «register.php», сохраняется в базе данных (которая мне все равно нужна).
- register.php затем отправляет
posix_kill(pid,SIGUSR1)
«сообщений» всем другим процессам, в настоящее время находящимся в базе данных.
- Регистрация выполняется с помощью ajax-вызова с тайм-аутом около 30 секунд (я думаю, это называется длинным опросом?)
register.php выполняет sleep(30)
после вызова pcntl_signal(SIGUSR1,handler)
, где handler
создаст ответ, содержащий текущих членов команды; ответ «без изменений», если сигнал не получен через 30 секунд
После тайм-аута на стороне клиента отправляется новый вызов ajax (только без регистрации и posix_kill
вызов), чтобы снова ждать обновлений ...
Прежде чем тратить свое время на излишне сложный код или заново изобретать какой-то стандартный код:
- Как вы думаете, это будет работать? Будет ли это достаточно эффективно для 100-1000 пользователей одновременно?
- Может быть, это даже стандартный способ, и есть пример кода?
- Есть ли более простые способы реализовать это (используя php на сервере)?
- Должен ли я вообще использовать websockets / SSE, если мне все равно нужна замена в случае пользователей IE или Edge?