Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Как правильно написать обновление чата на PHP

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Создание веб-сайтов
Предыдущая тема :: Следующая тема  
Автор Сообщение
VeL



Зарегистрирован: 18.01.2006
Сообщения: 521
Откуда: Харьков

СообщениеДобавлено: Чт Июн 12 2008 23:20    Заголовок сообщения: Как правильно написать обновление чата на PHP Ответить с цитатой

Доброго времени суток ув спецы!

Я собираюсь сделать чат на PHP но у меня есть теоретический вопрос:

За счет чего реализовывается интерактивное обновление окна чата?

Например, первый пользователь заходит на веб чат, дальше он пишет в формочке фразу, нажимает на кнопочку (происходит событие) и сообщение уходит.

Далее другой пользователь, который аналогично зашел на этот же чат с другого конца земного шарика видит фразу, которую сказал первый пользователь.

Так вот вопрос:
Когда первый пользователь производит событие по отправке фразы php скриптом, то эта фраза сначала попадает на сервер (ну там в базу MySQL или в текстовый файл) то для того чтобы другой пользователь увидел эту фразу в окне своего браузера нужно чтобы каким то способом сервер сообщил (ну или передал) браузеру это сообщение (т.е. скажем так сервер по событию "дернул" браузер) или браузер на стороне другого пользователя должен сам обновляться с заданной периодичностью (через несколько секунд например, и если да то какое должно быть это значение в секундах?)?

Может ктонить объяснить этот механизм на пальцах как это работает на больших серьезных и быстрых чатах?
Какие при этом используются эленемны языка php или HTML т.е. мета фреймы какие нить или что именно? Мне ненужно объяснение с полностью готовыми скриптами, мне нужно просто в общих чертах понять как и с помощью чего это работает
_________________
Best regards
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
NetFantom



Зарегистрирован: 27.01.2004
Сообщения: 41
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июн 13 2008 04:09    Заголовок сообщения: Ответить с цитатой

Если это нужно для дела, то я советую не париться, а взять готовый движок чата.
Но, судя по всему, это вы так учитесь. Я бы посоветовал вам сначала выучить матчасть, чтобы не задавать дурацких вопросов, в частности теорию о взаимодействии клиент-сервера (в данном случае браузера и веб сервера). Ведь если бы вы знали, что браузер не устанавливает постоянного соединения с сервером (если не идет речи о плагинах), то вопросов о том кто кого должен дергает не возникало бы. А уж объяснить "этот механизм на пальцах как это работает на больших серьезных и быстрых чатах", если речь идет о действительно серьезных проектах вряд ли представляется возможным.
По теме, я бы порекомендовал поискать соответствующие статьи в Гугле и Яндексе.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Пн Июн 16 2008 18:29    Заголовок сообщения: Ответить с цитатой

Проще говоря, "дернуть" браузер нельзя. Окно чата должно периодически обновляться (чем популярнее чат, тем чаще). Обновление можно производить банальным META HTTP-EQUIV=REFRESH, или HTTP-заголовками, или сценарием. Ничего страшного не произойдет, если один чатер увидит сообщение другого не сразу, а через несколько секунд после написания.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
VeL



Зарегистрирован: 18.01.2006
Сообщения: 521
Откуда: Харьков

СообщениеДобавлено: Пт Июн 20 2008 21:15    Заголовок сообщения: Ответить с цитатой

Mytilus Galloprovincialis писал(а):
Проще говоря, "дернуть" браузер нельзя. Окно чата должно периодически обновляться (чем популярнее чат, тем чаще). Обновление можно производить банальным META HTTP-EQUIV=REFRESH, или HTTP-заголовками, или сценарием. Ничего страшного не произойдет, если один чатер увидит сообщение другого не сразу, а через несколько секунд после написания.

Спасибо за ответ, я почитал еше доки на эту и понял что чаты организовуются по такому принцыпу как вы и описали, т.е. получается что когда пользователь нажимает на кнопочку отправить, в скрипт передаются значения (т.е. текст сообщения), этот скрипт просто добавляет в файл эту строку, а потом остальные браузеры при обновлении просто его считывают из файла и таким образом получается информация отображается у всех чатников.

Отсюда возник еще один вопрос на тему "как сделать правильно":
Мне нужно для чата обязательно организовать историю, данные самой истории лучше хранить в текстовом файле или всеже в MySQL?

При обновлении скрипт браузеров чатников каждый раз перечитывает файл в котором находятся сообщения чата, так вот, этот процесс всегда организовывается именно через файл на диске (это я к тому, что диск считается медленным механическим устройством, и если чатников будет много а интервал обновления маленьким не возрастет ли слишком нагрузка на сервер и не будет ли он от этого тормозить и не загнется ли жессткий диск сервера от постоянного процесса его чтения?)?

Не лучше ли для этого использовать MySQL т.е. хранить сообщения чатников сразу в СУБД (если опять же чатников будет много и интервал обновления будет маленьким не будет ли перегрузки MySQL сервера от такого колличества SELECT запросов при организации обновления?)?

Из выше изложенных мыслей напрашивается мысль, а нельзя ли эти сообщения, например 50 штук, хранить в оперативной памяти сервера (скажем так как переменную массив, но как создать такую переменную чтобы она была общей и единой (а не копией, т.к. мы то физически ее пишем в скрипте) для всех)? Т.е. пользователь скриптом отправляет сообщение, скрипт это сообщение записывает в MySQL и добавляет его в переменную масив, которая находится в оперативной памяти, а далее скрипты которые выполняют обновление, они каждый раз перечитывали бы не файл (или SELECT к базе) а именно переменную которая в оперативной памяти, так вообще сделать реально? если да то подскажите плиз в какую сторону доку читать.

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

P.S Ну и если мои соображения вообще неправильны, то в двух словах расскажите плиз как это делается?
_________________
Best regards
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Mytilus Galloprovincialis



Зарегистрирован: 30.08.2005
Сообщения: 358
Откуда: откуда все люди родятся

СообщениеДобавлено: Сб Июн 21 2008 17:23    Заголовок сообщения: Ответить с цитатой

SQL работает очень быстро, поэтому вопрос о том, что выбрать - SQL или текстовый файл - возникать не должен. Конечно, SQL бытрее в разы. Это даже можно проверить опытным путем. Более того, не стоит после отклика на запрос закрывать соединение с базой SQL. Это позволит снизить загрузку и сократить время отклика. Между подключением к базе и отключением от нее, все изменения держатся в оперативной памяти драйвером SQL, а непосредственно в базу они записываются в режиме низкого приоритета. Это значит, что первостепенной задачей драйвера является отклик на запрос, а не запись обновлений базы на жесткий диск. Отсюда следует, что все необходимые данные будут храниться в оперативной памяти, пока открыто соединение с базой, и нагрузка на жесткй диск не повлияет на работу SQL.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
VeL



Зарегистрирован: 18.01.2006
Сообщения: 521
Откуда: Харьков

СообщениеДобавлено: Вс Июл 27 2008 19:16    Заголовок сообщения: Ответить с цитатой

Mytilus Galloprovincialis писал(а):
Проще говоря, "дернуть" браузер нельзя.

А как же тогда работают так называемые потоковые чаты? которые устанавливают соединение с сервером и обновляются только тогда когда приходит новое сообщение на сервер?
С постоянным рефрешем я разобрался как это делается, но это оказывается создает большую нагрузку на сервер, и когда пользователей становится много он начинает тормозить.

На каком языке пишутся потоковые Web чаты описанные мною выше?
На PHP у меня все получилось, работает, но хотелось бы чтобы чат мог работать с большим колличеством пользователей.

Может кому попадалась хорошая статья по этому поводу, как Web браузеру установить соединение с сервером и обновляться только при поступлении нового сообщения, а не самому постоянно обновляться через указанное время.
_________________
Best regards
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Создание веб-сайтов Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...