Комментарии 61
Вот уж нифига себе. Обновление кода на лету в живом процессе. Действительно черная магия :-)
А еще его можно выполнять в «виртуальной машине» с урезанным набором функций. Отличная тема для ресурса (например бота), которому желают дать безопасно исполнять сторонний php-код.
В php очень не хватало переопределения родных функций. Как бывает хочется залогировать вызовы определенных функций в чужом, незнакомом коде, скриптов на 200.
осталось только переопределять родные true в false и отдавать болгарам дебажить…
Хотелось бы еще понимать, что можно было бы сделать этим инструментом.
Спасибо, полезно, пригодится думаю…
Чего тока не сделают лишь бы не пользоваться подходящим под задачу языком %)
НЛО прилетело и опубликовало эту надпись здесь
Это верно и примеры хорошие. Начал не правильно и потом придется переписывать.
PHP гениальная вещь в плане разработке простых сайтов — быстрая разработка, простой вход, огромное кол-во программистов и т.д.
Но это не повод делать на нём всё подряд — для каждой задачи разные языки по разному подходят
PHP гениальная вещь в плане разработке простых сайтов — быстрая разработка, простой вход, огромное кол-во программистов и т.д.
Но это не повод делать на нём всё подряд — для каждой задачи разные языки по разному подходят
Скажите «прощай карма». Злостные фанаты похапе, которые ничего кроме него не знают, вас злостно заминусуют.
И ведь, действительно, проблема не в самом PHP, а в том, что людям просто обучаться лень. Уровень входа в ту же Java не просто выше, а выше во много раз.
Очень забавно смотреть сколько усилий тратят на разработку RIA приложений на PHP вместо написания всего этого при помощи того же самого GWT.
И ведь, действительно, проблема не в самом PHP, а в том, что людям просто обучаться лень. Уровень входа в ту же Java не просто выше, а выше во много раз.
Очень забавно смотреть сколько усилий тратят на разработку RIA приложений на PHP вместо написания всего этого при помощи того же самого GWT.
НЛО прилетело и опубликовало эту надпись здесь
Google — C++. Yandex, видимо, — тоже. Рамблер, Mail.ru — не PHP. Продолжать?
Кроме того, это вообще не показатель. Может, вы и удивитесь, но Java во столько раз быстрее PHP, что решение писать большой проект на PHP можно оправдать только отсутствием знаний других языков.
Если же говорить именно о больших проектах, то гугл активно разрабатывает на Java. Быть может, там популярность и намного меньше, но при таких масштабах проблема скорости языка решается просто докупкой серверов.
На PHP спокойно можно писать крупные проекты. Более того: если вы лучше всего разбираетесь именно в нем, то именно на нем и стоит писать. Проблема в том, что есть более лучшие решения. Если вы их не знаете, это не оправдание PHP. Это — лишь отсутствие знаний.
Фраза «Facebook написан на PHP» не может являться аргументом для того, чтобы перестать развиваться как программист. Изучение более серьезных и более продуманных языков (а Java — один из таких) делает вас лучшим программистом. На многие вещи начинаешь смотреть по-другому, начинаешь видеть другие способы решения задач. Абсолютное большинство новых тенденций в PHP слизано с других языков. Наверное, это о чем-то говорит?
ЗЫ: Ах, да, Twitter написан не на PHP:)
Кроме того, это вообще не показатель. Может, вы и удивитесь, но Java во столько раз быстрее PHP, что решение писать большой проект на PHP можно оправдать только отсутствием знаний других языков.
Если же говорить именно о больших проектах, то гугл активно разрабатывает на Java. Быть может, там популярность и намного меньше, но при таких масштабах проблема скорости языка решается просто докупкой серверов.
На PHP спокойно можно писать крупные проекты. Более того: если вы лучше всего разбираетесь именно в нем, то именно на нем и стоит писать. Проблема в том, что есть более лучшие решения. Если вы их не знаете, это не оправдание PHP. Это — лишь отсутствие знаний.
Фраза «Facebook написан на PHP» не может являться аргументом для того, чтобы перестать развиваться как программист. Изучение более серьезных и более продуманных языков (а Java — один из таких) делает вас лучшим программистом. На многие вещи начинаешь смотреть по-другому, начинаешь видеть другие способы решения задач. Абсолютное большинство новых тенденций в PHP слизано с других языков. Наверное, это о чем-то говорит?
ЗЫ: Ах, да, Twitter написан не на PHP:)
в Google активно используются еще Java и Python. Но там также используются PHP, Perl и остальные
В личке попросили дать пруф. Вот panela.blog-city.com/python_at_google_greg_stein__sdforum.htm:
Internally Google people use many technologies including PHP, C#, Ruby and Perl
можно по-подробнее и с примерами о том, что java быстрее php и где?
>решение писать большой проект на PHP можно оправдать только отсутствием знаний других языков.
Оправдать можно что угодно и чем угодно :) Тем более, что человек, принимающий решение о выборе языка может не знать вообще ни одного, кроме русского (английского, китайского,… — нужное подчеркнуть) и руководствуется он, например, оценкой стоимости разработки, при неограниченном времени, может минимазацией времени разработки при фиксированном бюджете, а может ещё чем.
>Проблема в том, что есть более лучшие решения.
Серебряная пуля? Или всё же лучше лишь некоторые показатели, а какие-то, наверняка, хуже? То есть «лучшесть» того или иного выбора зависит от того какие показатели считать приоритетными, а какими можно пренебречь?
Оправдать можно что угодно и чем угодно :) Тем более, что человек, принимающий решение о выборе языка может не знать вообще ни одного, кроме русского (английского, китайского,… — нужное подчеркнуть) и руководствуется он, например, оценкой стоимости разработки, при неограниченном времени, может минимазацией времени разработки при фиксированном бюджете, а может ещё чем.
>Проблема в том, что есть более лучшие решения.
Серебряная пуля? Или всё же лучше лишь некоторые показатели, а какие-то, наверняка, хуже? То есть «лучшесть» того или иного выбора зависит от того какие показатели считать приоритетными, а какими можно пренебречь?
Интервью: новый веб-сервис «Яндекса» построен на языке Python и фреймворке Django
И многое другое в яндексе на питоне. Про яву вообще смешно говорить — на ней очень много всего, включая биллинг — что намного сложнее простой соц сети. HipHop где-то в статьях оценивали в 300к строк… а facebook можно и в 100к уложить было без всяких hiphop'ов
Пруф линкhttp://soft.compulenta.ru/346012/
И многое другое в яндексе на питоне. Про яву вообще смешно говорить — на ней очень много всего, включая биллинг — что намного сложнее простой соц сети. HipHop где-то в статьях оценивали в 300к строк… а facebook можно и в 100к уложить было без всяких hiphop'ов
Пруф линкhttp://soft.compulenta.ru/346012/
>а facebook можно и в 100к уложить было без всяких hiphop'ов
сомнительно
взять хотябы Code-Igniter, один из легковесных php-фреймворков:
163982 строк php кода.
или Вордпресс в стандартной поставке
96496 строк пхп кода.
сомнительно
взять хотябы Code-Igniter, один из легковесных php-фреймворков:
163982 строк php кода.
или Вордпресс в стандартной поставке
96496 строк пхп кода.
Не ведитесь…
О, ранкитище. Благодаря ему я написал baxtep (да и вобще познал внутрености пыха), благодаря которому получил инвайт сюда )
А если по делу — то рульная либа. Правда еще не пришлось использовать ее в реальных условиях — пока только just for fun…
А если по делу — то рульная либа. Правда еще не пришлось использовать ее в реальных условиях — пока только just for fun…
Если ранкит опять не пропадет — будет замечательно. Я в свое время когда баловался с написанием IRC бота решал проблему перезагрузки скриптов использованием лямбда функций...(php 5.3), что неудобно, если проект ООП.
Отлично! Что дальше на очереди? Предлагаю занеймспейсивание и отказ от такого кол-ва статики, какое сейчас.
Опа, сэндбокс. Теперь у противников «нативной шаблонизации» на один аргумент (секурность) меньше, а у противников Смарти и ко. на один больше :) Теперь доверить составить шаблон для своей страницы можно любому пользователю, не опасаясь что он вызовет что-то нехорошее.
эти пхпдемоны — такие демоны.
жутко меня прет, как серпомпояичкам.
Еще бы встроенный механизм обменами сообщениями между клиентами в разных воркерах, идеально даже на разных серверах.
Сделать то его не сложно, но хотелось бы оригинальное решение чтобы было.
Не хотите поговорить об этом?
жутко меня прет, как серпомпояичкам.
Еще бы встроенный механизм обменами сообщениями между клиентами в разных воркерах, идеально даже на разных серверах.
Сделать то его не сложно, но хотелось бы оригинальное решение чтобы было.
Не хотите поговорить об этом?
Есть встроенный клиент gearman, есть механизм через mongodb, есть возможность работать с сетью. Вам шашечки или ехать?
Пхп демон замечательная вешь, активно рекламлю всем знакомым, и не очень приятно когда через неделю они расстроенные жалуются что не могут преодолеть некие технологические и идеологические барьеры.
Последние жалобы были именно на межклиентское взаимодействие.
Суть проста:
Так как не я управляю распределением клиентов по воркерам, логикой этого распределения и вообще явно не управляю активностью клиентов — лучше эти хреновы «слоты и сигналы» делать все же вместе с ядром.
Сейчас да, я могу без проблем обмениваться сообщениями между клиентами одного воркера.
Без проблем могу переводить клиента в allertable состояние, чтобы он, например, разгребал входящие с mongo( а опрос там идет через sleep, а не по ивенту входящего сообщения).
Либо могу сделать так чтобы клиент регался в воркере, тот вел репозитарий своих клиентов, искал нужных клиентов в своих френдах и спускал им сообщения по полной цепочке.
Могу еще 5-6 вариантов взаимодействий предложить, разной степени сложности и длины конвейера.
Но в корне всего простое действие — надо знать где сидит клиент — сервер, порт, воркер, слот и так далее…
Без этих данных ни gearbox не прицепишь к правильному серверу, ни в монге не найдешь ключик с неким «обоснованным» именем.
От сюда вопрос — лично я уже еду, а другим каждый раз шашечки рисовать?
Последние жалобы были именно на межклиентское взаимодействие.
Суть проста:
Так как не я управляю распределением клиентов по воркерам, логикой этого распределения и вообще явно не управляю активностью клиентов — лучше эти хреновы «слоты и сигналы» делать все же вместе с ядром.
Сейчас да, я могу без проблем обмениваться сообщениями между клиентами одного воркера.
Без проблем могу переводить клиента в allertable состояние, чтобы он, например, разгребал входящие с mongo( а опрос там идет через sleep, а не по ивенту входящего сообщения).
Либо могу сделать так чтобы клиент регался в воркере, тот вел репозитарий своих клиентов, искал нужных клиентов в своих френдах и спускал им сообщения по полной цепочке.
Могу еще 5-6 вариантов взаимодействий предложить, разной степени сложности и длины конвейера.
Но в корне всего простое действие — надо знать где сидит клиент — сервер, порт, воркер, слот и так далее…
Без этих данных ни gearbox не прицепишь к правильному серверу, ни в монге не найдешь ключик с неким «обоснованным» именем.
От сюда вопрос — лично я уже еду, а другим каждый раз шашечки рисовать?
Необходимо понимать что это уже уровень приложения, а не ядра фреймворка.
Весьма универсальным решением является хранение в MongoDB коллекции sessions с текущими подключениями, вида {userid: ..., workerId: ..., connId: ...}, где workerId — уникальный ID приложения задаваемый в onReady(), а connId — ID текущей сессии, userid — идентификатор пользователя.
И при отправке события пользователю необходимо выбрать все активные сессии данного пользователя, и вставить в коллекцию events событие с двумерным массивом связок workerId/connId. А каждый воркер слушает предназначенные ему события через tailable cursors по workerId и направляет уже клиентам. Это просто летает. Я на такой схеме сделал чат как на фейсбуке с мгновенной синхронизацией между несколькими броузерами.
И при отправке события пользователю необходимо выбрать все активные сессии данного пользователя, и вставить в коллекцию events событие с двумерным массивом связок workerId/connId. А каждый воркер слушает предназначенные ему события через tailable cursors по workerId и направляет уже клиентам. Это просто летает. Я на такой схеме сделал чат как на фейсбуке с мгновенной синхронизацией между несколькими броузерами.
мне не совсем нравиться sleep в монго клиенте, который будет выполняться у каждого клиента.
Красивее делать get пачкой для всех ожидающих клиентов в самом воркере, потом спуск значения до конечного пользователя.
Но в данный момент у меня чат работает точно также, на томже демоне. Имхо его это самое востребованное применение — обслуживать longpoll и другие кометы.
Красивее делать get пачкой для всех ожидающих клиентов в самом воркере, потом спуск значения до конечного пользователя.
Но в данный момент у меня чат работает точно также, на томже демоне. Имхо его это самое востребованное применение — обслуживать longpoll и другие кометы.
> мне не совсем нравиться sleep
sleep? О чем Вы?
> Красивее делать get пачкой для всех ожидающих клиентов в самом воркере, потом спуск значения до конечного пользователя.
Ну так и происходит вообще-то ;-) 1 висящий запрос к базе данных, и «спуск» событий сессиям. Всё на уровне приложения.
sleep? О чем Вы?
> Красивее делать get пачкой для всех ожидающих клиентов в самом воркере, потом спуск значения до конечного пользователя.
Ну так и происходит вообще-то ;-) 1 висящий запрос к базе данных, и «спуск» событий сессиям. Всё на уровне приложения.
Я работал по типу github.com/kakserpom/phpdaemon/blob/master/app-servers/MongoNode.php, где на строке 174 — слип, потом опять запрашиваем данные.
Про tileable тоже до конца не понял.
Хоть тресни, но сама монга нам не пошлет ивент о своем изменении.
Или пошлет, а я отстал от жизни?
Про tileable тоже до конца не понял.
Хоть тресни, но сама монга нам не пошлет ивент о своем изменении.
Или пошлет, а я отстал от жизни?
есть еще варианты через web-worker-ы, любые системы сообщений (MQ) или через Redis Pub/Sub. Кстати гиарман хороший вариант
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
phpDaemon и runkit: новый уровень