Возможно ли на php написать многопотокового демона?

Alexandre

PHPПенсионер
А вообще, есть ли еще какие-нибудь возможности создания чата не прибегая к созданию демона?
я писал чат без демона, у меня был забит авто-аплоад фрейма каждые 10 или 15 сек.
фрейм "Кто в чате" - определялся по результатам сессии, сессии были в БД

я не назову чат более функциональным, по сравнению с Диминым, но чад худо-бедно работал (сейчас проект по причине закрытия журнала - умер)
 

AnToXa

prodigy-одаренный ребенок
nerezus
прошу не равнять других на себя, если вы получаете кучу утечек памяти, то отсюда не следует, что у других такие же проблемы. ферштейн?

-~{}~ 13.11.06 12:26:

phprus
согласен, согласен также, что скорее всего это не будет проблемой, а может и стать.

еще причины?
 

Vladson

Сильнобухер
Автор оригинала: AmadMike
А вообще, есть ли еще какие-нибудь возможности создания чата не прибегая к созданию демона?
Возможно всё, только надо смекалку включить и JavaScript под учить...
 

AmadMike

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

nerezus

Вселенский отказник
прошу не равнять других на себя, если вы получаете кучу утечек памяти, то отсюда не следует, что у других такие же проблемы. ферштейн?
Ну ладно, а секьюрити-юязвимости? Переполнения буфера? Теоретически можно написать и без них. Есть даже примеры: MTA qmail. Но на этом примеры и закончились ;)
Возьми тот же апач к примеру. И просто посмотри в багтрек.
 

AnToXa

prodigy-одаренный ребенок
> а секьюрити-юязвимости?
практически не зависят от языка, на яве мало их что ли?
ну если по-простому: http://www.google.com/search?q=java+security+vulnerability (это я еще плохо запрос составил :D )

> переполнения буфера?
зависит от рук, уже сказал.

> Возьми тот же апач к примеру. И просто посмотри в багтрек.
дело как раз в том, что очень мало сервисов должны смотреть во внешний мир, *очень* *мало*. остальные - сидят за ними, например тот же демон чата совершенно не должен общаться с клиентами и смотреть наружу на 80 порту, это должен делать вебсервер за него.
очевидно, что к сервисам, которые не смотрят во внешний мир предъявляются на порядок менее строгие требования по безопасности.
 

AnToXa

prodigy-одаренный ребенок
затем что каждый должен заниматься своим делом, вы ведь не предлагаете в mysql запихнуть возможность отдавать странички с данными из таблиц по 80 порту?
 

Андрейка

Senior pomidor developer
AnToXa
сорри.. собстно и вопрос был - каким таким делом? и какие у апач+демон приемущества против апач+пхп+(мускул/шаредмемори етс)?
 

AnToXa

prodigy-одаренный ребенок
я бы не извращался и положил данные в heap таблицу в базе, никаких проблем имхо(ну одна, когда удалять старое, решается запуском одного скрипта по крону + лимит если надо почистить realtime, или схему как с gc_probability в session).

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

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

Плюс имхо не стоит пытаться исключить пхп из процесса, т.е. надо рассматривать apache + php + chat_daemon vs apache + php + db/files/shmem/etc.

Ну performance конечно еще может быть аргументом, да.
 

hermit_refined

Отшельник
Живучая тема :)

php-демон + апач - это всё-таки развлекаловка какая-то, занимательное упражнение для мозгов.
Imho, если нагрузка очень большая - демон на C и никаких посредников. Если просто большая, куда лаконичней и логичней - апач + бд + кеширование в shmem и никаких демонов. Если же обычный чат - хватит одной бд.
 

nerezus

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


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

очевидно, что к сервисам, которые не смотрят во внешний мир предъявляются на порядок менее строгие требования по безопасности.
Т.е. можно допускать сколько угодно секьюрити-багов?
 

Андрейка

Senior pomidor developer
nerezus
баги не "допускают", баги находят.. кто их будет находить в твоем спрятанном мегадемоне - непонятно
 

Alexandre

PHPПенсионер
nerezus не надо обижать одаренного ребенка, он может разозлиться...

если ближе к теме - то С - язык низкоуровневый, но быстрый.
За скорость мы вынуждены расплачиваться сложностью, в частностью учетом всех leaks...
вылезем на более абстрактный уровень, например - ява или пхп, часть проблем с leaks и garbage же учтеы...но если уж они там есть, то мы уже ни как на их процесс не повлияем...

вернемся к теме, Автору - нужно адаптировать чат Димы Бородина, а использование shmem и прочих архитектур - это переписывание чата почти с ноля.

так что решение -должно быть реальным
 

voodoo

Новичок
Antoxa, если речь идет о потоковом чате, то демон за апачем не имеет смысла, т.к. возвращаемся к схеме
х клиентов -- х коннектов -- х чайлдов апача.

смысл демона в схеме
х клиентов -- х коннектов -- один процесс демона (даже многопоточность там не нужна)
 

Alexandre

PHPПенсионер
Тогда чат можно было бы организовать с помощью AJaX, что конечно конкурировать с демоном по нагрузке и производительности не смогло, но все-же было бы гораздо лучше чем классический вариант.
AmadMike А чем принципиально отличается использование AJaX от классического чата? только видом представления XML/ HTML данных
и видом транспорта - HttpRequest/IFrame (Frame), хотя тотже аякс в качестве транспорта может испрользовать IFrame.

voodoo не совсем ясна реализация х коннектов -- один процесс демона без многопоточности...
-~{}~ 14.11.06 14:36:
ааа... просек, висит один процесс, который просматривает БД или shmem и держит в памяти все актуальные сообщения.
Браузер обращается не к Апачу а к демону напрямую за отображением актуальных сообщений.
Вопрос - как будут дружить на одном пору Апач и Чат-Демон? (или сажаем демона на иной порт, но как в этом соображения секюрити? имеется ввиду- настройки проксей пользовательских сетей )
 

AnToXa

prodigy-одаренный ребенок
voodoo
не надо пытаться выдать проблемы апача за проблемы схемы организации приложений, заменяем apache на nginx и нет проблем.
x клиентов -- x коннектов -> один(или сколько скажете) процесс nginx -> (один или сколько напишете, можно потоков наплодить) процесс демона.

nerezus
Покажи мне, как сделать переполнение буфера на яве?
на яве просто класс ошибок немного другой, да там нельзя испортить память, зато можно получить в лоб каким-нибудь Out of bounds exception или null pointer exception, чем не ошибка?

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

ошибки в софте есть всегда, потому что его пишут люди, ошибки есть в любом софте, независимо от языка на котором он написан.

Т.е. можно допускать сколько угодно секьюрити-багов?
в общем-то ответ "да", здравый смысл никто не отменял конечно, но если никто не будет пытаться ломать, то не надо и защищать.
 

Alexandre

PHPПенсионер
на яве просто класс ошибок немного другой, да там нельзя испортить память, зато можно получить в лоб каким-нибудь Out of bounds exception или null pointer exception, чем не ошибка?
+1
 
Сверху