Нужен ли демон?

Нужен ли демон?

Здравствуйте!
Хочу написать чат на сокетном соединение.
1) Теоретически, для чего вообще нужен демон, если он работает и обменивается данными со скриптом, который находиться на этом же сервере? Вот я понимаю, когда есть на локальном компьютере клиент (Java или др.), а на сервере демон (PHP или С++) и они обмениваются информацией по протоколу, тогда суть ясна, но первое...?
2) Для чего демон, если данные (в конкретном случае сообщения) сохраняються в БД или файлы?
3) Прошу розьясните мне суть и функции демона в чатах и если есть почитать о них.

Заранее спасибо.
 

Popoff

popoff.donetsk.ua
Curly-fingers
Попытайся сделать без демона - и, уверен, ты сам всё поймёшь.
 
Popoff
Я уже сделал много вариантов:
1) HTML + PHP (перезагрузка фрейма)
2) JS + PHP (JShttpRequest)
3) flush() + PHP (без перезагрузки)
Но зачем демон, не пойму. Обьясните. Некоторый опыт в написании чатов имею.
 

Frol

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

Frol

Новичок
и каждому клиенту по демону?
на этот вопрос не надо отвечать. это ответ на твой вопрос.
 

Popoff

popoff.donetsk.ua
Curly-fingers
При большом количестве соединений такая система рухнет.
 

Vladson

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

(всё это ИМХО и его можно пытаться опровергать, только ногами не бейте, я сам демонами не занимаюсь)
 

Dreammaker

***=Ф=***
И кроме того, демона можно заставить, в принципе, вообще не общаться с базой ;) Он будет себе тихо висеть и запоминать последние N сообщений и отдавать страждущим..

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

Popoff

popoff.donetsk.ua
Curly-fingers
Демон - это
Скрипт (если на PHP) который весит в фоновом режиме, с помощью бесконечного цикла считывает наличие клиентов и данных на указаном IP и порте. Клиент передает данные на указаный IP и порт этому скрипту и он их обрабатывает. Примерно так.
 

stalxed

Новичок
Автор оригинала: Popoff
Curly-fingers
Демон - это
Скрипт (если на PHP) который весит в фоновом режиме, с помощью бесконечного цикла считывает наличие клиентов и данных на указаном IP и порте. Клиент передает данные на указаный IP и порт этому скрипту и он их обрабатывает. Примерно так.
Ну демон это вообще программа висящая в фоновом режиме. В случае с php организуется он циклом, который висит до тех пор пока его не вырубит злой админ) Делать бесконечный цикл(типа
PHP:
while(true)
{
#действие
sleep(1);
}
)не советую! Так как потом чтобы его убить потребуется связь с админом... Лучше сделать в каждый проход цикла проверку какого-то значения(из бд или с файла)и рушить в случае соответствующего значения цикл... Просто тут столкнулся с написанием демонов на php, ой вообще php и демон слова плохо совместимые с первого взягляда....Но icq бот на этом принципе пашет уже больше суток без падений) Ещё совет в cron поставьте скрипт который в случае падения демона запустит его снова, запустить прямо из крона вы демона не сможете, для запуска демона из крона запустили скрипт который по сокетам его запустит... Сорри за мини оффтоп...
 
Посчитал ненужным создавать новый топик.
Извините что тревожу, но вот ещё одна проблемка. Использую демон из темы . Telnet отправляет и принимает данные нормально и сразу при завершении сеанса в нем, демон реагирует тоже удаляет клиента, а вот пытаюсь через скрипт, но не могу закрыть. Как будто соединение висит и не закрывается. Подключаюсь из скрипта к демону и просто отправляю данные один раз таким образом:
PHP:
function to_daemon($message)
	{
		$ip = "127.0.0.1";
		$port = 8000;
		$fp = fsockopen($ip, $port);
		fwrite($fp, $message."\n");
		//fputs($fp, $message."\n");
		fclose($fp); // Мне кажеться что функция не срабатывает, хотя возвращает true
	}
Помогите разобраться с проблемой.
Заранее благодарен.
 

stalxed

Новичок
хм попробуй поставь таймаут функции... я когда бота из скрипта запускал тоже возникала ошибка..скрипт откуда запуск шёл не завершался...хотя в твоём случае не знаю что за ошибка даже...
 

ONK

Пассивист PHPСluba
Автор оригинала: Popoff
Curly-fingers
При большом количестве соединений такая система рухнет.
Что такое большое количество соединений, и почему рухнет?
 

Olegaarh

Новичок
Доброго времени суток, не стал создавать отдельную тему.
Есть скрипт-демон (demon.php) который ловит данные на определенном порту (при помощи сокетов) и кидает их в базу. Скрипт index.php выводит эти данные на экран выбирая их из базы. Т.е пользователь заходит на index.php ему выдаются самые последние данные.
Возможно ли сделать так, чтобы при занесении данных в базу демоном, обновлялся скрипт index.php (обновлялся для пользователя, чтобы он видел изменение информации). Как я понимаю надо в демоне каждый раз при внесении инфы в базу данных вызывать исполнение скрипта index.php Но меня смущает то, что index.php во время обновления будет открыт пользователем. Это не будет помехой?
 

Beavis

Banned
Olegaarh
Танкист :)

что значит обновлялся скрипт index.php ? после того как он получил данные из базы, сформировал HTML, он отправляет его за тысячи километров пользователю... и для того чтоб пользователь увидел новые данные на экране ему опять нужно послать запрос на сервер, тот должен получить данные из БД, сформировать HTML, и опять послать данные пользователю

более подробно тут http://www.phpfaq.ru/na_tanke
 
Сверху