Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как написать чат-демона на PHP? 
V
    Опции темы
OverClocker
  Дата 21.11.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Здравствуйте, ребят!

Я конечно опять же хочу извиниться, если мой вопрос будет глупым, но всё же. Задачи две. Первая: написать робота для обычного Web-чата, который будет постоянно сидеть там. Вторая: написать сам чат, непрерывно обновляющийся и не тормозящий при большом кол-ве народа. И для той, и для другой задачи требуется написать даймон (демон). Как его писать средствами PHP - не знаю. Может Вы что-нибудь подскажете. На C++ не писал ничего ни для Юникса, ни для сети в целом... Так что лучший вариант для меня, это PHP в данном случае.
smile
PM MAIL WWW   Вверх
OverClocker
Дата 1.12.2005, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Никто не знает? Эх, обидно. Какую неделю уже ответ жду smile
PM MAIL WWW   Вверх
fara
Дата 2.12.2005, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 15.3.2004
Где: С.-Петербург

Репутация: нет
Всего: 2



У PHPClub есть такой чат.
--------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший!
PM MAIL ICQ   Вверх
AkimVital
Дата 5.12.2005, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



Вообще, смутно еще представляю, какие задачи тут должен выполнять демон...
По поводу робота, если робот должен периодически кидать в общий рум какие-то месседжи, то действительно нужен демон, даже желательно вызываемый кроном. Даже такой можно написать на PHP, только как CGI модуль. Если же он просто должен отвечать на реплики пользователей в его адрес, то это может делать и скрипт, который принимает POST формы сообщения.
Если в чате используется скрипт, выполняемый бесконечно (цикл while (1)), который проверяет, поступили ли новые сообщения (в базе данных) для текущего пользователя, и если поступили, то он пишет сообщение в буфер и выталкивает его (flush()), после - засыпает sleep(1) и по новой.... В таком случае можно создать переменную-хронометр, которая в каждой итерации цикла увеличивается на 1, и при достижении определенного значения или события обнуляется. Так ее значение равное 60, означает, что с момента ее обнуления прошла 1 минута, и значит можно кого-то запустить =)...

А лучше всего, воспользоваться перлом...
PM MAIL   Вверх
OverClocker
Дата 5.12.2005, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Цитата(AkimVital @ 5.12.2005, 10:17)
Если в чате используется скрипт, выполняемый бесконечно (цикл while (1)), который проверяет, поступили ли новые сообщения (в базе данных) для текущего пользователя, и если поступили, то он пишет сообщение в буфер и выталкивает его (flush()), после - засыпает sleep(1) и по новой.... В таком случае можно создать переменную-хронометр, которая в каждой итерации цикла увеличивается на 1, и при достижении определенного значения или события обнуляется. Так ее значение равное 60, означает, что с момента ее обнуления прошла 1 минута, и значит можно кого-то запустить =)...

Вот с этого момента можно по подробнее. У меня на хостинге таймаут есть, нужно его избежать... В общем нечто подобное... Демон должен принимать мессаги и тут же выдавать во фрейме диалога их.

fara, Ты случайно не про chat.php.spb.ru?
PM MAIL WWW   Вверх
Guest
Дата 6.12.2005, 00:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











на счет таймаута: пишешь
Код

set_time_limit(0);

и он будет выполнятся пока сервер(апач) не оключится от пользователя.
Код

$timer = 0;
while (1) { 

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

flush(); //сообщения тут же напраляются к браузеру пользователя.

далее
Код

if (($timer > 60*1)) {
    // тут вызываем функцией или инклудом нужные нам события.  

    $timer = 0; 
} 

}
$timer++; //увеличиваем счетчик времени
sleep(1); //засыпаем на 1 секугду
} //while

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

function shutdown_() {
    global $USR;    
    logout($USR;); 
    
    session_unregister("$USR;");
    session_destroy();
}

if (function_exists("shutdown_")) {
    Register_shutdown_function("shutdown_");
}


если расскажешь в каком формате и фрме хранятся сообщения, тогда можна еще подробней. =)
  Вверх
AkimVital
Дата 6.12.2005, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2005

Репутация: нет
Всего: нет



/\
||
случайно от гуеста написал =)

в последнем коде в двух местах опечатка кавычек после переменной $USR.

Это сообщение отредактировал(а) AkimVital - 6.12.2005, 00:34
PM MAIL   Вверх
OverClocker
Дата 6.12.2005, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



AkimVital, огромное тебе спасибо! Примного благодарен. Попробую протестировать код на хостере, надеюсь, что пренудительного таймаута там нет. smile
PM MAIL WWW   Вверх
mr.fox
Дата 13.12.2005, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.3.2005
Где: Ирландия

Репутация: нет
Всего: 2



Цитата(Guest @ 6.12.2005, 00:27)
sleep(1); //засыпаем на 1 секугду

так ты заснешь на 1 тысячную (помоему) секунду..
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 13.12.2005, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



mr.fox не, именно секунда.
PM ICQ   Вверх
Opik
Дата 22.12.2005, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 3
Всего: 55



Демон на PHP - извини, но изврат.
PM MAIL Skype   Вверх
OverClocker
Дата 22.12.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Opik, посоветуй тогда другой язык. Но только мне придётся читать RTFM с нуля... smile
PM MAIL WWW   Вверх
Opik
Дата 22.12.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 3
Всего: 55



OverClocker
У меня сейчас: демон на с++, модуль к апачу на с++ - для общения с демоном, ну и сам чат - PHP + JS
PM MAIL Skype   Вверх
OverClocker
Дата 25.12.2005, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Opik, скажи, пожалуйста, с чего начать в написании програм для Web на C++? А то я даже не знаю, как этого демона потом запускать. Я так понял, что нужно зайти на шелл и что-то сделать. В общем, как прогу на C++ заставить работать на сервере? И, если можно, примерчик бы какой-нибудь....
PM MAIL WWW   Вверх
Opik
Дата 30.12.2005, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 3
Всего: 55



PM MAIL Skype   Вверх
OverClocker
Дата 30.12.2005, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 12.11.2005

Репутация: нет
Всего: нет



Opik, очень благодарен! Сейчас вот сижу, разбираюсь. Спасибо большое! smile
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0559 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.