ФорумПрограммированиеPHP для идиотов → Создание браузерной игры с нуля, вопросы внутри

Создание браузерной игры с нуля, вопросы внутри

  • DenisS1

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 13 августа 2010 г. 15:09, спустя 1 день 20 часов 40 минут

    Итак, модель сообщений разработана, для передачи использую IFrame, добился кроссбраузерности… теперь последняя проблема. Как из одного потока сообщить что-нибудь всем клиентам (или какой-либо группе)? Т.е. вот получил я сообщение о том, что юзер1 переместился из локации1 в локацию2 - как дать понять об этом другим? Если это невозможно из-за конструктивных особенностей PHP, придётся переходить на что-то типа Erlang.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 13 августа 2010 г. 15:37, спустя 27 минут 58 секунд

    я немного недопонял. Расскажи подробнее, как у тебя организована связь с сервером. Ну, постоянное соединение типа Comet?
  • DenisS1

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 13 августа 2010 г. 15:42, спустя 4 минуты 38 секунд

    Подумал: если в PHP процессы могли бы как-то обмениваться между собой данными, то можно было бы замутить такую штуку: каждый процесс game.php не завершается после формирования странички, а уходит в цикл, разрываемый только закрытием сессии. В цикле он 1) проверяет, не пришло ли сообщений от его клиента - если пришли, записывает их в общую область памяти; 2) проверяет, нет ли в общей области памяти новых сообщений 3) отбирает из них те, которые имеют отношение к его клиенту (по территориальному признаку, по id боя и т.д.) 4) отправляет своему клиенту xml с обновлениями => к шагу 1.
    Можно ли реализовать такую систему на PHP?
    Будет ли она тормозить, когда в онлайне будет, скажем, 5000 пользователей?
    Спустя 230 сек.
    Абырвалг , сейчас я пишу чат: клиент нажимает на кнопку "отправить", сообщение отсылается на сервер через невидимый IFrame методом POST, сервер проверяет а допустимость длины, отсутствие мата и спама, и если всё хорошо, присылает <script>, который немедленно выполняется в IFrame и выводит в текстовое поле сообщение. Как выводит его и у других клиентов?

    Просто в web-программировании я полный нуб и по-моему я немного недопонимаю архитектуру PHP.
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 13 августа 2010 г. 15:47, спустя 5 минут 50 секунд

    хм. А зачем тут ифрейм? Это можно просто на аяксе.

    не завершается после формирования странички, а уходит в цикл, разрываемый только закрытием сессии.

    Хочешь демона - http://phpdaemon.net/
  • DenisS1

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 13 августа 2010 г. 16:03, спустя 15 минут 59 секунд

    А зачем тут ифрейм?

    А мы не ищем лёгких путей =) Нет, на самом деле, отправлять Аяксом можно, а получать? Только один раз - а после этого переподключение. Вот я заодно и потренировался работать с фреймом.
    Насчёт phpDaemon - спасибо, похоже, то что нужно. Не знал о такой вещи.
  • Flare

    Сообщения: 284 Репутация: N Группа: Кто попало

    Spritz 13 августа 2010 г. 22:30, спустя 6 часов 26 минут 29 секунд


    А зачем тут ифрейм?

    А мы не ищем лёгких путей =) Нет, на самом деле, отправлять Аяксом можно, а получать? Только один раз - а после этого переподключение. Вот я заодно и потренировался работать с фреймом.
    Насчёт phpDaemon - спасибо, похоже, то что нужно. Не знал о такой вещи.

    http://dklab.ru/lib/dklab_realplexor/
    Спустя 26 сек.
    http://rutvit.ru/realplexor/demo
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 14 августа 2010 г. 2:12, спустя 3 часа 42 минуты 32 секунды

    сейчас я пишу чат: клиент нажимает на кнопку "отправить", сообщение отсылается на сервер через невидимый IFrame методом POST, сервер проверяет а допустимость длины, отсутствие мата и спама, и если всё хорошо, присылает <script>, который немедленно выполняется в IFrame и выводит в текстовое поле сообщение. Как выводит его и у других клиентов?


    юзай аякс, зачем фреймы?
    Спустя 30 сек.
    тоже обновление окно чата можно на jquery рефрешем
    Спустя 177 сек.
    что то вроде
    var auto_refresh = setInterval(
    function ()
    {
    $('#window_chat').load('chat.php');
    }, 4000);
    Спустя 121 сек.
    по поводу обмена данными клиент <-> сервер, опять тот же jquery refresh, в ответ клиенту приходит json тело с необходимыми данными и обновляем
  • DenisS1

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 14 августа 2010 г. 3:59, спустя 1 час 46 минут 37 секунд

    Pasha, дело в том, что чат сможет работать в 2 режимах. В быстром режиме строка будет отображаться по мере ввода в режиме реального времени. Можно будет стирать очепятки и писать дальше. Если пользователь дошёл до конца строки, она обрывается многоточием и продолжается с первой свободной. Если нажал Enter или если вышло определённое время с момента ввода последнего символа - тоже начинается новая строка. А теперь представьте, сколько раз в секунду придётся вызывать refresh(), чтобы создать такой эффект "живого разговора"?
    Flare, чёрт… Придётся ставить Linux, чтобы попробовать. Но производительность впечатляет :-)
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 14 августа 2010 г. 6:33, спустя 2 часа 34 минуты 11 секунд

    сам не знаешь чего хочешь
  • Givi

    Сообщения: 2284 Репутация: N Группа: Адекваты

    Spritz 14 августа 2010 г. 14:10, спустя 7 часов 37 минут 7 секунд

    DenisS1, нахуй юзеру отправлять текст, если он его набирает? Если хочет отправить, пусть жмет энтер, иначе пусть дописывает/исправляет что ему нужно.
    п.с. Вообще пользователи сами будут такому недовольны, потому как отправка чего-то без их ведома - это уже плохо.
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz 14 августа 2010 г. 15:57, спустя 1 час 47 минут 4 секунды

    Givi, тут как раз есть все прозрачно, ибо пользователи знают, что текст отправляется без их ведома
  • DenisS1

    Сообщения: 14 Репутация: N Группа: Кто попало

    Spritz 16 августа 2010 г. 15:35, спустя 1 день 23 часа 38 минут

    Ещё одна проблема: не знаю, как принять XML-файл на сервере. Отправить отправил с помощью XMLHttpRequest(), а что писать в $_POST[] в качестве идентификатора?
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 17 августа 2010 г. 6:45, спустя 15 часов 10 минут 1 секунду

    var_dump($_REQUEST)
    adw/0
  • Astro

    Сообщения: 15 Репутация: N Группа: Кто попало

    Spritz 18 августа 2012 г. 14:11, спустя 732 дня 7 часов 25 минут

    На горе кудрявый дуб,
    Под горою липа.
    Петька Маньку завалил-
    Делает Филиппа.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!