Форум → Программирование → PHP для идиотов → Создание браузерной игры с нуля, вопросы внутри
Создание браузерной игры с нуля, вопросы внутри
-
Авг. 13, 2010, 11:09 п.п., спустя 1 день 20 часов 40 минут
Итак, модель сообщений разработана, для передачи использую IFrame, добился кроссбраузерности… теперь последняя проблема. Как из одного потока сообщить что-нибудь всем клиентам (или какой-либо группе)? Т.е. вот получил я сообщение о том, что юзер1 переместился из локации1 в локацию2 - как дать понять об этом другим? Если это невозможно из-за конструктивных особенностей PHP, придётся переходить на что-то типа Erlang. -
Авг. 13, 2010, 11:37 п.п., спустя 27 минут 58 секунд
я немного недопонял. Расскажи подробнее, как у тебя организована связь с сервером. Ну, постоянное соединение типа Comet? -
Авг. 13, 2010, 11:42 п.п., спустя 4 минуты 38 секунд
Подумал: если в PHP процессы могли бы как-то обмениваться между собой данными, то можно было бы замутить такую штуку: каждый процесс game.php не завершается после формирования странички, а уходит в цикл, разрываемый только закрытием сессии. В цикле он 1) проверяет, не пришло ли сообщений от его клиента - если пришли, записывает их в общую область памяти; 2) проверяет, нет ли в общей области памяти новых сообщений 3) отбирает из них те, которые имеют отношение к его клиенту (по территориальному признаку, по id боя и т.д.) 4) отправляет своему клиенту xml с обновлениями => к шагу 1.
Можно ли реализовать такую систему на PHP?
Будет ли она тормозить, когда в онлайне будет, скажем, 5000 пользователей?Спустя 230 сек.Абырвалг , сейчас я пишу чат: клиент нажимает на кнопку "отправить", сообщение отсылается на сервер через невидимый IFrame методом POST, сервер проверяет а допустимость длины, отсутствие мата и спама, и если всё хорошо, присылает <script>, который немедленно выполняется в IFrame и выводит в текстовое поле сообщение. Как выводит его и у других клиентов?
Просто в web-программировании я полный нуб и по-моему я немного недопонимаю архитектуру PHP. -
Авг. 13, 2010, 11:47 п.п., спустя 5 минут 50 секунд
хм. А зачем тут ифрейм? Это можно просто на аяксе.не завершается после формирования странички, а уходит в цикл, разрываемый только закрытием сессии.
Хочешь демона - http://phpdaemon.net/ -
Авг. 14, 2010, 12:03 д.п., спустя 15 минут 59 секунд
А зачем тут ифрейм?
А мы не ищем лёгких путей =) Нет, на самом деле, отправлять Аяксом можно, а получать? Только один раз - а после этого переподключение. Вот я заодно и потренировался работать с фреймом.
Насчёт phpDaemon - спасибо, похоже, то что нужно. Не знал о такой вещи. -
Авг. 14, 2010, 6:30 д.п., спустя 6 часов 26 минут 29 секунд
А зачем тут ифрейм?
А мы не ищем лёгких путей =) Нет, на самом деле, отправлять Аяксом можно, а получать? Только один раз - а после этого переподключение. Вот я заодно и потренировался работать с фреймом.
Насчёт phpDaemon - спасибо, похоже, то что нужно. Не знал о такой вещи.
http://dklab.ru/lib/dklab_realplexor/Спустя 26 сек.http://rutvit.ru/realplexor/demo -
Авг. 14, 2010, 10: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 тело с необходимыми данными и обновляем -
Авг. 14, 2010, 11:59 д.п., спустя 1 час 46 минут 37 секунд
Pasha, дело в том, что чат сможет работать в 2 режимах. В быстром режиме строка будет отображаться по мере ввода в режиме реального времени. Можно будет стирать очепятки и писать дальше. Если пользователь дошёл до конца строки, она обрывается многоточием и продолжается с первой свободной. Если нажал Enter или если вышло определённое время с момента ввода последнего символа - тоже начинается новая строка. А теперь представьте, сколько раз в секунду придётся вызывать refresh(), чтобы создать такой эффект "живого разговора"?
Flare, чёрт… Придётся ставить Linux, чтобы попробовать. Но производительность впечатляет :-) -
-
Авг. 14, 2010, 10:10 п.п., спустя 7 часов 37 минут 7 секунд
DenisS1, нахуй юзеру отправлять текст, если он его набирает? Если хочет отправить, пусть жмет энтер, иначе пусть дописывает/исправляет что ему нужно.
п.с. Вообще пользователи сами будут такому недовольны, потому как отправка чего-то без их ведома - это уже плохо. -
Авг. 14, 2010, 11:57 п.п., спустя 1 час 47 минут 4 секунды
Givi, тут как раз есть все прозрачно, ибо пользователи знают, что текст отправляется без их ведома -
Авг. 16, 2010, 11:35 п.п., спустя 1 день 23 часа 38 минут
Ещё одна проблема: не знаю, как принять XML-файл на сервере. Отправить отправил с помощью XMLHttpRequest(), а что писать в $_POST[] в качестве идентификатора? -
Авг. 17, 2010, 2:45 п.п., спустя 15 часов 10 минут 1 секунду
var_dump($_REQUEST)https://smappi.org/ - платформа по созданию API на все случаи жизни -
Авг. 18, 2012, 10:11 п.п., спустя 732 дня 7 часов 25 минут
На горе кудрявый дуб,
Под горою липа.
Петька Маньку завалил-
Делает Филиппа.
Пожалуйста, авторизуйтесь, чтобы написать комментарий!