Создание настольного чата с веб-сайтом PHP / MySQL, выступающим в роли сервера - PullRequest
0 голосов
/ 14 сентября 2011

В большинстве настольных чатов, вероятно, используется специальное программное обеспечение, запущенное на удаленном выделенном блоке. Тем не менее, есть ли способ поддержать приложение чата простым веб-сайтом PHP / MySQL? Если да, то какой общий совет вы бы дали в отношении входа в систему и отправки / получения текста?

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Есть две проблемы с архитектурой (PHP / MySQL), которую вы предлагаете.

1) Чат - это двусторонний трафик. Это означает, что вам нужно каким-то образом отправить сообщение своим пользователям. Один из вариантов заключается в том, чтобы ваши клиенты постоянно опрашивали новые сообщения (генерируя много трафика). Другой способ - дождаться ответа на HTTP-запрос до появления сообщения. Это зависит от времени ожидания в сети (время ожидания от прокси-сервера, время ожидания от HTTP-сервера). Но это сработало бы.

2) Вы должны иметь возможность обмениваться сообщениями между экземплярами PHP. Когда вы загружаете страницу HTTP, запускается один процесс PHP, который преобразует код PHP в HTML. Вы предлагаете использовать MySQL в качестве общего хранилища данных между этими процессами. Это означает, что ваш PHP-код должен постоянно опрашивать базу данных. Они также должны отметить, какие сообщения были переданы клиенту, а какие нет. Может быть, сообщения будут потеряны по пути, нет уверенности.

Из-за этих двух проблем программы чата лучше оставить для конкретной архитектуры.

1 голос
/ 14 сентября 2011

Вот как бы я это сделал:

Создайте базу данных mySQL, чтобы действовать в качестве истории сообщений. Но используйте другое средство ретрансляции сообщений. Такие как memcache.

Поскольку веб-сокеты находятся на небольшом расстоянии, система сообщений требует браузер для опроса или long-poll / comet для получения новых сообщений. Вы не хотите опрашивать MySQL для этого. Вместо этого - новые сообщения попадают в запись memcache, которая опрашивается получателями.

Если вы хотите сохранить эти сообщения, вы можете периодически сохранять их в mySQL.

1 голос
/ 14 сентября 2011

Я сам запрограммировал простое приложение для чата, используя базы данных PHP и SQL. Вы можете проверить это здесь .

То, как я это делал, держало базу сообщений. Пользователь остается на одной веб-странице. Когда пользователь вводит сообщение и нажимает клавишу ввода, в сценарий PHP делается запрос AJAX POST. Затем этот скрипт вставляет в базу данных строку с данными сообщения и т. Д. Затем каждую 1 секунду запрашиваются новейшие 8 сообщений (через AJAX), а затем помещаются в div на странице. Все это происходит каждую минуту.

Есть ряд проблем с этим дизайном.

Наиболее очевидным является потребление полосы пропускания. Независимо от того, есть ли новые сообщения, они все равно запрашиваются каждую секунду. Я сам придумал новую концепцию. Каждую секунду вместо запроса всех сообщений он запрашивает количество сообщений. Затем он сравнивает локальное количество с количеством серверов. Если они разные, он запрашивает новые сообщения. Вы могли бы даже пойти дальше, найдя разницу между счетчиками сообщений, а затем запросить каждое новое сообщение в цикле for, а затем внедрить их в DOM.

...