Я создаю простой клиент чата ajax для школьного проекта и подумал о способе его реализации, но, похоже, ИМО является очень громоздким подходом:
1) Пользователь A отправляет сообщение, которое принимается скриптом PHP на стороне сервера и сохраняется в базе данных. 2) Браузер пользователя B периодически запускает скрипт PHP на стороне сервера, чтобы проверить, есть ли какие-либо сообщения в базе данных для пользователя B. PHP-скрипт находит сообщения от пользователя A и возвращает их.
Правильно ли это? Можно ли обеспечить связь между этими двумя пользователями без базы данных?
(Это мое первое веб-приложение … если бы я делал это без браузеров + HTTP, я бы просто сделал программу Java с постоянным классом, который слушал в сокетах TCP и пересылал сообщения на соответствующий адрес)
Да, ваше решение достаточно для начала. То, что вы делаете, – это опрос сервера, если есть какие-либо сообщения чата для конкретного пользователя. Достаточно хорошо.
Но если вы хотите перейти на следующий уровень (возможно, может быть жестким), у вас может быть сервер, который может вызывать новые сообщения в клиентских браузерах. Это называется «комета». Но для этого потребуются обширные серверные ресурсы (если ваша база данных будет превышать тысячи).
Сначала попробуйте свой метод и следуйте этому.
Каждый «экземпляр» PHP длится только на время запроса, поэтому вам нужно постоянное хранилище, такое как база данных для сообщений чата.
И да, я знаю, что это работает, потому что я реализовал очень похожую систему в прошлом.
Teehoo, если вы хотите использовать рабочий метод, то, что вы предложили, будет хорошо, особенно если это только для школьного проекта.
Если вы хотите что-то вроде того, как это делает Facebook, вы должны посмотреть на HTTP-соединения commet. Это очень умно. Помню, когда я впервые прочитал об этом, я подумал, что это гениально. Он обеспечивает быстрое обновление и почти исключает зависимость AJAX путем постоянного опроса новых сообщений, потому что вы постоянно открываете свое подключение к веб-серверу.
Прочтите сообщения о кометах http (но не смотрите на приложение чата кометы, они – компания, пытающаяся продать продукт, похожий на приложение для чата facebook, и не то, что вы хотите .. хотя они внедрили комету метод).
Комета Чат #
http://en.wikipedia.org/wiki/Comet_(programming) )
Затем прочтите следующее:
http://www.zeitoun.net/articles/comet_and_php/start
Но в любом случае, то, что вы предложили, подходит для школьного проекта.
Правильно ли это? Можно ли обеспечить связь между этими двумя пользователями без базы данных?
Вы, по крайней мере, нуждаетесь в хранении какой-либо формы – характеристики сохранения данных зависят от вас. База данных – это хороший способ сохранить данные в течение длительного времени.
Вы также можете рассмотреть возможность совместного использования памяти, например memcache.
То, что вы также можете сделать, это использовать подход, похожий на комету, как javascript. Вы сохраняете соединение с открытой страницей PHP в браузере, пока страница PHP не получит сообщение.
Однако вы все еще ограничены обслуживанием страницы PHP для каждого соединения, поэтому вам нужно некоторое хранилище. Если вы хотите, чтобы это было очень быстро, вы могли использовать память.
Использовать память в PHP: http://www.php.net/manual/en/function.apc-add.php
Кометный подход к чату: http://www.zeitoun.net/articles/comet_and_php/start#comet_with_classic_ajax_litte_chat_demo
ну да ответ. вы можете сделать это без базы данных.
Но .. вам придется каким-то образом хранить данные на центральном сервере. для приложения чата рациональная база данных не идеальна для этого приложения типа чата, но его действительно актуально, если у вас большой сайт. если вы делаете это для проекта, тогда база данных будет достаточно хорошей, чтобы хранить информацию о чате. вам просто нужно опросить базу данных для новых сообщений, используя javascript / ajax.
Если вы заинтересованы в том, чтобы не использовать базу данных, я бы предложил использовать не-sql-подход. Google – ваш друг, потому что есть много вариантов.