Pull to refresh

Comments 103

Интересная разработка. Потестю на досуге.
Класс! Но всё-таки положили, кажется :)
До. Мы это сделали!
Брызги шампанского, визги поетесс, хлопушки и фейрверки.
Ура, товарищи!
Чятик героически выдержал 15 человек
Да он может и 3000 =) Я тестировал на ботах.
Погоди, а падал он тогда зачем7
Он же сказал, что ребутал.
Т.е. это нечто такое, способное выполнять какие то долгие операции по команде?
разработка интересная, но лично мне не понравилось вот такие вот вещи {Daemon::$settings[$k] = 0;}

и я бы на вашем месте для создания обьектов пользовался бы fabric method — ибо public function onHandshake($client) {return $this->sessions[$client->connId] = new ChatSession($client,$this);}
это не дело как мне кажется.
Класс. Сам хотел сделать костыльно-ориентрированный фреймворк для демонов, но это явно перекрывает все мои нужды.
UFO just landed and posted this here
UFO just landed and posted this here
автор немножко не расчитал наверное вероломство хабраюзера и чат зафлудили/положили :)
Звучит прям как «Хабраюзер не прощает...»
ну не только хабраюзер. самая мелкая ошибка никогда не прощается, однако даже самое большое достижение может забываться… так устроен человек.
От флуда через putty на 8047 падал… или я ошибаюсь?
Замечательно, особенно с учетом моей любви к PHP-решениям. Обязательно потестирую на досуге.
Идеальный чатик :) Щас доков начитаюсь и буду думать чтоб сделать, уж очень вкусно все это выглядит :)
Язык удобный. И быстрый в сравнении с другими схожими по возможностям (Ruby, Java, ASP). Ни в коем случае не хочу холи вара. Это лишь моё личное субъективное мнение :-)
Да нет мне просто интересно, сам на Php пишу. А не было желание на другом языке написать? Или по сркоам надо было быстро сделать?
90% пхпшников знают только этот язык. Это не проблема. Проблема в том, что когда им аргументированно доказывают, что их язык уступает и в возможностях, и в скорости, и в удобстве другим, то вместо того, чтобы признать узость своего кругозора и пытаться развиваться, они лишь огрызаются.

Перл комментатора выше о том, что PHP быстрее Java только лишь подтверждает это.

Тоже не хочу холивара, но тот факт, что сборка мусора появилась в пхп совсем недавно, ставит под сомнение попытки написания демонов на этом языке. Имхо, слишком велик риск нарваться на неожиданные проблемы. В конце-концов, у каждого языка и технологии есть свои задачи.
Хотя я и отношусь к 10% пхпшников, но для меня критическим является распространенность языка, тут уж PHP в вебе мало кому уступит (если считать по количеству инсталляций). А распространенность — это комьюнити, это готовые решения, это библиотеки/фреймворки/CMS, это хостинги, это, в конце-концов, вакансии и «лоты» на фрилансерских биржах.

Те же руби и пайтон мне понравились как языки, но вот как средство зарабатывать, не владея языком в совершенстве… Just for fun :( Слишком велика ступень между «hello word» (утрирую) и редкими вакансиями Junior Python/Ruby Developer. Да и «пропихнуть» свое предложение, когда язык не задан, куда проще, если можно добавить, что скрипты будут работать на подавляющем большинстве хостингов, включая бесплатные, а не «радовать» заказчика тем, что для сайта-визитки какого-нить ООО «Рога и копыта» ему понадобится выделенный сервер.
UFO just landed and posted this here
А почему бы не лежать dev-версии? =) Это же не production stable, и даже не бета.
Ну был тут чатик на AMQP-сервере. Вполне себе не падал и работал шустро. Ваше решение падает. значит что-то там не так. + хотелось бы статистики, от какого наплыва людей оно упало.
И почему PHP? Особенно через FastCGI. который он так и не поддерживает нормально.
Может легче всеже через RabbitMQ серевер гонять сообщения, все же именно для этого Эрланг и был создан? (например)
Выгладит, конечно, круто, но к сожалению внутри, как и прежде, такой говнокод…
 public function onReady()
 {
  $this->errlogfile = dirname(__FILE__).'/cgi-error.log';
  if (!isset(Daemon::$settings[$k = 'modcgiallowoverridebinpath'])) {Daemon::$settings[$k] = TRUE;}
  if (!isset(Daemon::$settings[$k = 'modcgiallowoverridecwd'])) {Daemon::$settings[$k] = TRUE;}
  if (!isset(Daemon::$settings[$k = 'modcgiallowoverridechroot'])) {Daemon::$settings[$k] = TRUE;}
  if (!isset(Daemon::$settings[$k = 'modcgiallowoverrideuser'])) {Daemon::$settings[$k] = TRUE;}
  if (!isset(Daemon::$settings[$k = 'modcgiallowoverridegroup'])) {Daemon::$settings[$k] = TRUE;}
  if (!isset(Daemon::$settings[$k = 'modcgioutputerrors'])) {Daemon::$settings[$k] = TRUE;}
 }
UFO just landed and posted this here
Просто пример для подражания.

Почему бы не сделать массив со значениями по умолчанию и не прибавить его к имеющемуся массиву? Это не единственный пример, там полно такого же.
UFO just landed and posted this here
Daemon::$settings = array_merge(array(
    'modcgiallowoverridebinpath'=> true,
    'modcgiallowoverridecwd'=> true,
    'modcgiallowoverridechroot'=> true,
    'modcgiallowoverrideuser'=> true,
    'modcgiallowoverridegroup'=> true,
    'modcgioutputerrors'=> true,
), Daemon::$settings);

(а табуляция по вкусу)
читая посты TravisBickl'а, я прям разрываюсь каждый раз. с одной стороны, просто офигительнейший функционал, на который нужно потратить несколько месяцев разработки, и это очень полезный и нужный функционал, и он работает, и его можно просто так взять и скачать и даже спросить человека который его написал. с другой стороны, вот этот код вгоняет меня в ступор. xor eax,eax какой-то. и в то же время код работает, и внутренняя логика в этом коде тоже есть. но как эта логика мне чужда, её как будто писал инопланетянин. но этот инопланетянин хороший программист, судя по единому стилю написания кода и его функциональности. но каков он, этот стиль!
и так каждый раз. мучаюсь.
Уважаемый коллега, Вы считаете что Ваш вариант более читабелен? Думаю, функцию array_merge знает меньше людей чем конструкцию if.
Во-вторых, мой вариант быстрее и кушает меньше памяти. При определенных условиях мой код вообще потребует записи, только проверит по порядку наличие всех переменных. Когда как Ваш в любом случае построит лишние два хеша, прогоняя проверки.

Стиль, на мой взгляд — воплощение логики. Не понимаете код — разбирайтесь, учитесь, это пойдет на пользу. Поверьте, у нас с Вами не только одна планета, но и одна страна и один город. По поводу кода — советую посмотреть вот этот кусочек кода (начиная с 1005 строки, в самом низу). Когда разберетесь и научитесь подобное писать, думаю, к Вам придет просветление и Вы сможете писать правильный код столь же легко как разговаривать. Уверяю, я этот код написал довольно быстро и читаю его как русский текст или код на любом другом языке который знаю, также легко и редактирую.
«Premature optimization is the root of all evil» — Кнут. мой код может работать в два, в три или даже в пять раз медленнее, но это — инициализация приложения и это — с огромной вероятностью — не повлияет на скорость. это же будет выполняться совсем редко, ведь так?

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

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

и вот за то, что вы решили этим всем с нами поделиться, мы за это очень благодарны (ну, во всяком случае я. тут я без без всякого ёрничанья говорю уже)
Полностью согласен, в данном случае эта разница абсолютно не играет роли (т.к. вызывается 1 раз только). Более того, я старался максимально упростить процесс написания приложений. Однако, я не очень понимаю что сложного в if и isset, это первый или второй урок PHP. Может я глупый, но я не понимаю что сложного. Я ни в коем случае не утверждаю что программирую или знаю регэкспы лучше кого бы то ни было — я лишь обсуждаю и сравниваю стиль кода чтобы научиться чему-то. Ведь стиль как Вы правильно подметили един — если я осознаю возможную ошибку, весь код поменяется, это ведь вопрос продуманный, а не тяп-ляп.
Позвольте поинтересоваться, а почему достаточная понятная реализация протокола на PHP вызывает недоумение, а код mysqlnd к примеру не вызывает? И его просто используют. Он на порядок сложнее для понимания, можете убедиться. Вот я и предлагаю просто использовать мой код, не обязательно разбираться как он написан. Ничтожное малый процент программистов лезут в исходники реализации языка на котором пишут.
так вот какое дело: в каждом конкретном случае ничего сложного. но из-за этих вот странных (с моей точки зрения) моментов в коде не получается прослеживать логику: «так, что тут происходит? ага, вызывается. а там что? так… а тут? а это? ой, а где мы и откуда это было вызвано?».

не обижайтесь, но такое ощущение, как будто вы много лет программировали на фортране для какой-нибудь ес эвм, потом столько же лет программировали микроконтроллеры, а потом встали не с той ноги и решили перейти на php.
ваш код очень отличается от кода всех php-проектов, которые я видел до сих пор. а на сишный код он очень-очень похож, только доллары везде расставлены. не то, чтоб это являлось проблемой само по себе, но, если вы вдруг серьёзно зададитесь целью популяризировать ваш фреймворк, то стиль кода может стать проблемой, на мой взгляд.
Интересное мнение — спасибо за комментарий. Просто я до сих пор был уверен что данный фреймворк очень сильно упрощает людям жизнь. Подумаю над этим.
Думаю, язык не столь важен. Мне честно говоря всё равно на чем программировать, на PCRE многокилобайтные выражение выписывать, на PHP писать, на Java 2SE, микроконтроллеры или загрузчик ОС, или на ANSI C что-нибудь. Это всего лишь элементарные машинные языки со своими правилами, которые помогают заставить компьютер делать то что от него требуется, в рамках приемлемых ресурсов.
Чтоб понять откуда что вызвано — в PHP рулит debug_backtrace() ;-) Хотя например я и так с ходу читаю любой код на языке который знаю.
А в заключение я вам открою, на мой взгляд, справедливую мудрость. Код и есть логика, надо прослеживать логику кода, а не программиста который его писал. Код это и есть объективное выражение этой логики, остальное — фантазия. Автора кода может уже и не быть на свете, и логики никакой нигде нет, кроме той что в коде который Вы читаете. Это же не стихи, и не живопись, чтобы там сокральный смысл ловить. Это алгоритм действий, который преобразуется в весьма ограниченный набор процессорных инструкций.
Как Вы считаете, написание доки решит проблему популяризации?
и, если уж говорить о скорости, то у меня такие операции:
создать массив из констант
получить массив из Daemon::$settings
смерджить эти два массива
положить результат в Daemon::$settings

а у вас:
положить в k строку
получить массив Daemon::$settings
проверить существование и ненулль элемента с индексом $k в массиве
если элемента нет, то добавить в этот массив элемент с таким индексом и значением true
положить в k другую строку
получить массив Daemon::$settings
проверить существование и ненулль элемента с индексом $k в массиве
если элемента нет, то добавить в этот массив элемент с таким индексом и значением true
и так много раз

samoval ~ # php file.php
5.8901879787445
5.1516609191895

W:\>php file.php
5.4503819942474
4.234375

(проверил два раза. на разных компьютерах)
samoval.ru/file.php.html

ВОТ ВИДИТЕ, МОЙ ВАРИАНТ БЫСТРЕЕ!!!
а вы View Source нажимали?

<?
class Daemon {
	public static $settings = array();
	
	public static function reset() {
		Daemon::$settings = array(
	    'modcgiallowoverridecwd'=> false,
    'modcgiallowoverridegroup'=> false,
	);
		}
	public static function asd() {
		if (!isset(Daemon::$settings[$k = 'modcgiallowoverridebinpath'])) {Daemon::$settings[$k] = TRUE;}
		if (!isset(Daemon::$settings[$k = 'modcgiallowoverridecwd'])) {Daemon::$settings[$k] = TRUE;}
		if (!isset(Daemon::$settings[$k = 'modcgiallowoverridechroot'])) {Daemon::$settings[$k] = TRUE;}
		if (!isset(Daemon::$settings[$k = 'modcgiallowoverrideuser'])) {Daemon::$settings[$k] = TRUE;}
		if (!isset(Daemon::$settings[$k = 'modcgiallowoverridegroup'])) {Daemon::$settings[$k] = TRUE;}
		if (!isset(Daemon::$settings[$k = 'modcgioutputerrors'])) {Daemon::$settings[$k] = TRUE;}
	}
	public static function qwe() {
		Daemon::$settings = array_merge(array(
		    'modcgiallowoverridebinpath'=> true,
		    'modcgiallowoverridecwd'=> true,
		    'modcgiallowoverridechroot'=> true,
		    'modcgiallowoverrideuser'=> true,
		    'modcgiallowoverridegroup'=> true,
		    'modcgioutputerrors'=> true,
		), Daemon::$settings);
	}
}


$ts1 = microtime(true);
for ($i=0;$i<100000;$i++) {
	Daemon::reset();
	Daemon::asd();
}
$ts2 = microtime(true);
echo ($ts2-$ts1)."\n";

$ts1 = microtime(true);
for ($i=0;$i<100000;$i++) {
	Daemon::reset();
	Daemon::qwe();
}
$ts2 = microtime(true);
echo ($ts2-$ts1)."\n";


?>
Вообще, изначально я говорил о языковой конструкции:
Daemon::$settings += array(
		    'modcgiallowoverridebinpath'=> true,
		    'modcgiallowoverridecwd'=> true,
		    'modcgiallowoverridechroot'=> true,
		    'modcgiallowoverrideuser'=> true,
		    'modcgiallowoverridegroup'=> true,
		    'modcgioutputerrors'=> true,
		);


Скорость варианта TravisBickle:
0.71443605423
Скорость моего:
0.367926836014
Остановился на Вашем варианте =) Переделаю. Благодарю.
у php есть замечательный баг, из-за которого очень легко подделать результаты теста (даже собственно не осознавая этого). суть его сводится к тому, что тот тет, который стоит ниже выполняется за меньшую скорость, чем тот тест, что стоит выше при прочих равных. подробнее — на форуме пхп.ру, третий пост снизу
лично у меня ваша программа даёт такие результаты: 1.1532959938049
1.1654109954834
я запускал её 5 раз подряд и каждый раз разница была во втором знаке. т.е. в пределах полутора процентов.

тем не менее, я проверил свой тест, поменяв местами вызовы. ничего не изменилось.
про xor eax,eax вы зря :)
UFO just landed and posted this here
Прошу прощенья за вторжение в дискуссию, но вообще-то не затрёт ;-) Там оригинальный массив идет вторым аргументом, а не первым.
Не понял реплику про isset.
мой мерге затрёт NULL'ы, если они были в настройках, но, насколько я могу судить по исходникам, это ничего не поломает.
наоборот, то есть, не затрёт. а isset затёр бы.
Или так…

$keys = array('modcgiallowoverridebinpath', 'modcgiallowoverridecwd' ,'modcgiallowoverridechroot', 'modcgiallowoverrideuser', 'modcgiallowoverridegroup', 'modcgioutputerrors');

foreach($keys as $v)
if (!isset(Daemon::$settings[$v])) { Daemon::$settings[$v] = TRUE; }

Или так…

$keys = array('modcgiallowoverridebinpath', 'modcgiallowoverridecwd' ,'modcgiallowoverridechroot', 'modcgiallowoverrideuser', 'modcgiallowoverridegroup', 'modcgioutputerrors');

foreach($keys as $v)
if (!isset(Daemon::$settings[$v])) { Daemon::$settings[$v] = TRUE; }

Боюсь это Вы загнули… значения могут быть разные.
UFO just landed and posted this here
да? посмеялся :)))
а что, слабо было через массив параметров сделать?
Мы оба правы. Просто мне байтики, а вам ехать :-)
да я думаю цепляетесь — это не говно код (пародокс в логики), а просто не переработанный код, видимо был изаначально 1 параметр, а потом стало несколько, и кто-то не сделал реконструкцию кода.
О, асинхронный неблокирующий сервер под PHP. Надо против Node.js потестить :)
мне Ваши идеи ещё понравились во время доклада на highload-е :)
к сожалению, применения в своих проектах пока не нашел…
Рад слышать.
Хотя доклад, думаю, провальный получился. Опыта нет в докладах…
мы надеямся, что не последний доклад…
доклад был не плохой, я его смотрел в онлайне, только ты очень уж разволновался и это было видно.
>>WebSocket (!) — да-да тот самый новый протокол от Google
Вот что значит грамотный пиар. Гугл первыми сделали реализацию вебсокетов, и теперь все думают что гугл придумал вебсокеты.
Если уж на то пошло, то первыми пропиарили, что они сделали реализацию вебмокетов ;)
kak.serpom.po.yaitsam@gmail.com – крутой у вас email
Идёт подключение долго шло и исчезло когда я вернулся с страницы «About»
Штука очень интересная.
Но этот код…

Хотя, это ещё вопрос, что лучше: суровый код, вокруг которого человек не поленился написать статью, либо «правильный» код, про который думаешь «ну вот, осталось ещё чуть-чуть подпилить, тесты дописать, чтобы не стыдно было, и можно будет писать статью на Хабр»… и так уже пару лет :)
Ну я даже спорить с ними не буду… Для них лучше лишний хэш объявить чем набор условий вполне себе нормальный… т.е. код, алгоритм которого просто делает то что от него требуется, и ничего лишнего. Нет же, им надо десяток абстракций накрутить.
под оперой 10.10 не работает кнопка «Log in» и вообще не работает, и на Хабре авторизоваться не получается тоже
Я это заметил, но честно говоря не было желания возиться с недоброузером, когда как даже в убогом IE6 всё нормально работает.
Верите нет, ни под ИЕ ни под хромом тоже не работает. Send data при нажатии на Log in растет, а Recieved нет.
а какой должен быть сервер что бы выдерживать тысяч 30 таких одновременных соединений?
Самый обычный… дедик любой, да и VPS тоже можно подобрать.
Смутило про «исключительно на пхп» и libevent. Оказалось вы все же работаете с pecl враппером, а не с libevent. Ну а проект… Не знаю, я не умею такое читать. Несколько настораживают всякое типа два подряд идущих event_base_loop. Но в любом случае для пхп мира это, конечно, прекрасная работа.
> читая посты TravisBickl'а, я прям разрываюсь каждый раз. с одной стороны, просто офигительнейший
> функционал… с другой стороны, вот этот код вгоняет меня в ступор. xor eax,eax какой-то.
+1
Думаю, что еще наберется +100 от других людей — я слышал как минимум от троих такое же мнение.

ИМХО — что автору (который — для меня совершенно очевидно — весьма талантливый программист) стоит перестать упираться рогом с его неповторимым стилем кодирования и перейти-таки на PEAR/ZF Coding Standards. На это уйдет примерно неделя (у меня в начале 2000-х ушло в сумме столько), после чего карма автора резко возрастет (а заодно и email сменить бы еще :).
Знаете, Дмитрий, а когда я читал Ваш код (JsHttpRequest) и исходники «правильного» чата chat.php.spb.ru, у меня он не вызвал ничего кроме отвращения :-) Но это не из-за стиля (хотя он мне тоже не понравился), а из объективных показателей, таких как переносимость, совместимость, производительность, расширяемость.
Исходники PEAR того хуже, одних собак в коде хватит на целый питомник.

У меня убеждение что большинство людей — ламеры, и не важно программисты они, режиссеры, или мясники — ламером может быть каждый. Хороших специалистов очень мало. И в то же время большинство людей очень не любят шевелить мозгами, им будто бы больно думать. Они хотят поделать что-нибудь привычное в своем привычном ламерском стиле, и пойти в пятницу напиться алкоголем. У меня другой менталитет, и я не хочу добиваться всеобщего признания и популяризации плодов моей работы путем собственного оглупления и дибилизацией собственного кода. Есть много людей которые с радостью используют мои open source продукты годами и полностью довольно, иногда пишут багрепорты, всегда быстро правлю.
Документацию, комменты и больше примеров — напишу, а код дибилизовать не стану. Наоборот кто хочет пусть смотрит код и комменты и учится на этом примере.

Никого обидеть не хочу, у нас у всех ДНК очень похожее.
Э-эээ…

dklab.ru/lib/JsHttpRequest/demo/lib/JsHttpRequest/JsHttpRequest.js — это файл после DOJO-минимизации (если Вы его смотрели).

А chat.php.spb.ru — это не мой, а Дмитрия Бородина, Вы перепутали. :-)

В общем, мы Вам тут сигнализируем о проблеме и от чистого сердца советуем придерживаться задокументированных стандартов кодирования, которыми пользуются тысячи человек. А Вы уж сами решайте. Поставьте «плюс» все, кто думает так же. :-)
Мне это напоминает, Вы уж извините, отеческое напутствие коммунистических бонз в сторону Битлов. Я даже близко не понимаю для чего Вам изменения стиля кодирования серпояйцего (не знаю настоящего имени). И уж, тем более, я не знаю для чего это имяреку.

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

P.S. Меня не покидает ощущение, что отторжение кода имярека у сообщества произошло из-за его подчёркнутой самоуверенности. Да, меня тоже это бесит, но при чём тут код?
Спасибо за комментарий. Мне это может быть нужно для популяризации. Ведь я перестаю быть малолетним гиком который пишет код ради кода. Код сам по себе мало чего стоит, если его не используют люди. Кстати я поправил этот кусок кода везде. Теперь плюсуется массив.

Правильный у Вас взгляд. Но мир не переделаешь, большинство хочет либо просто либо никак. А почему уверенные в себе люди Вас бесят? Это же хорошо. Если человек действительно знает всё дело, он уверен в себе и в своих силах… Я ведь никого этим не хочу задеть, это личное дело каждого как он относится к себе лично =)
Ну, значит я не прав и не дорос до Вас. :) На мой взгляд код — выражение идеи. Сам по себе он ничего не даёт, главное — технологии, алгоритм, идея. Если его можно поддерживать и развивать при том стиле написания который есть — зачем менять стиль? При этом я понимаю, что мои рассуждения абсолютно не применимы для Open Source. Но, как я сказал выше, я для вклада в OS не дорос.
Меня бесит то, что Вы подчёркнуто самоуверенны. То, как Вы иногда строите фразы, вызывает у меня ощущение самолюбования. Вот именно оно и бесит.
Ваша уверенность в своих силах и знаниях, на мой взгляд, объективна, и она даже близко не вызывает отторжения :)
Пять баллов. :)

Главное иногда не зарываться и уметь перешагивать через свои ошибки :)
Прошу прощенья, мне давали ссылку на тот чат, говоря именно Ваше имя, говоря про JsHttpRequest и т.д. Ошибочка вышла :-)

Спасибо за совет, Дмитрий, я постараюсь, правда. Извините еще раз за ошибку.
Лучше уж так как в исходниках чата чем 100500 велосипедов в коде :)
P.S. Тон комментария получился не совсем удачный, если что прошу извинить. Наезжать не хотел, это просто беседа «о птичках».
Дмитрий,

про чистоту кода ему раз сто
говорили, когда он тусовался на PHPClub…

но, что ни говорите, а голова у него на плечах…
Василий,

молодец, осваиваешь NoSQL
и комментарии мне твои понравились…

желаю успехов!
народ, может кто независимое сравнение сделает php-fpm — phpDaemon?
и выложит статью на Хабре
Зачем их сравнивать? У ФПМ — скорострельные одноразовые странички, у пхпдемона — приложения висящие в памяти. Делать на демоне одноразовые страницы неверно. Делать на фпм приложения в памяти не получится.
А что для этого нужно? Такой демон на PHP можно на обычный shared-хостинг засабачить?
В целом здорово, но как-то сумбурно код написан… И надо уточнять что он сразу заточне только для php 5.3, как я понял, ниже версии использовать нельзя.
А в чем сумбурность? По-моему замечательный код.
Тут в Q&A вопрос подняли habrahabr.ru/qa/973/#answer_4115 — как c утечками памяти в php вообще? А мне интересно как с ними в вашем демоне. Рестартовать периодически рекомендуете или месяцами без проблем может работать?
Утечки безусловно есть, но воркеры сами плавно перезапускаются при достижении заданного порога памяти, так что это не проблема и работает месяцами стабильно.
Вопрос: а почему не Gearman, скажем, в качестве асинхронного фреймворка? Там, ведь, тоже можно в воркере поднять коннект и другие персистентные объекты до ухода в цикл обработки сообщений.
Скажите а что с поддержкой Oracle

Sign up to leave a comment.

Articles