Задать вопрос
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    Вы так ничтоже сумняшеся поставили себя в один ряд с Дейкстрой, ну-ну...

    Это уже пошли выкрутасы. Вы сами высказали, что мое мнение не авторитетное. Поэтому уточнил, что это не только мое мнение.

    Алан Кэй кстати именно за внедрение ООП получил ее, забавно, да?

    Вот только он против современного так называемого ООП. Его слова: "Я придумал термин ООП, но не имел ввиду C++". Есть еще его высказывания подобной направленности.

    ФП не такое уж и простое, а ООП не такое и сложное.

    И чем же ФП сложное? С любой стороны ФП проще. Потому что Лямбда-исчисление само по себе простая модель. Может ли быть полноценный удобный язык проще чем Лисп? Идея о том, что приложение это просто функция - простая. Даже такие сложные приложения как компиляторы/интерпретаторы прекрасно реализуются в таком стиле. Можно легко разложить такое приложение на функции и держать все это в голове. Подобное приложение в стиле современного ООП будет монструозным и запутанным, его невозможно будет держать в голове.


    Вам когда в детстве давали инструкцию "купи хлеба и вынеси мусор", вы покупали хлеб и сразу его выбрасывли в виде мусора? Или все же знали, чтото о состояниях и обрабатывали их независимо?

    Человек - не машина. Инструкции не любят читать и плохо понимают. Потому что императивность. Декларативный язык математики понимают намного большее количество людей. Только не надо цепляться за слова и утверждать, что ООП концептуально не является императивной моделью. ООП всё то же последовательное изменение состояний, только в другом виде.

    используемое повсеместно

    Это не означает, что идея не дурацкая. Повсеместно - значит используется большинством. Большинство - всегда ошибочно, потому что нет своего мнения, потому что толпа, у толпы нет интеллекта. Все побежали и я побежал. Самые лучшие идеи всегда не находятся на поверхности.
    Написано
  • Можно ли использовать Telegram для идентификации?

    @azuf
    Мне сложно понимать написанное в законах

    milltt, Думаю и юристам тоже.

    Если хотите сами идентифицировать пользователей, то вам придется стать оператором ПДн.

    alexalexes, Разве не почти всех приравняли к ним? Нанимаешь сотрудников - обрабатываешь их персональные данные, и соответственно обязан обеспечить всю бюрократию.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    Vitsliputsli, CGI, fastcgi - устаревшие подходы с низкой производительностью. Если я не прав, то можете привести пример когда php-fpm может нести большую нагрузку чем workerman и подобные серверы. Любое самое тормозное веб-приложение на таком сервере становится более производительным, чем аналогичное на php-fpm. Тот же Laravel на Swoole как пример. Не обязательно вдаваться в тонкости чтобы это утверждать. Нет примеров где php-fpm лучше, а если есть - покажите.

    Не только я плохо отзываюсь о так называемом ООП, но и многие всемирно известные деятели в IT. Не только Дейкстра. Нужно привести их имена? По вашему современная индустрия лучше во всем разбирается чем лауреаты премии Тьюринга? Вероятно не все они могли отличать грамотные элегантные идеи от дурацких. У всех же разный тип мышления. Есть универсальные критерии для оценки. Простое лучше сложного. ФП - простое, ООП - сложное. Чем меньше кода - тем меньше проблем. ФП - мало кода, ООП - много кода. Человек не приучен мыслить в моделях вычислений с состояниями. Зато с детства приучается мыслить в аппликативных моделях вычислений. Потому ФП - естественная модель программирования, а ООП - нет.

    У большинства нет своего мнения. Они просто следуют за кем то. Так было и будет всегда. Поэтому аргумент большинством - не аргумент.
    Написано
  • Какой современный движок интернет-магазина выбрать?

    @azuf
    Ну да, только вот все эти дни, пока я тут не был, писал разрабам платных движков и что же выходит?

    А зачем вы пишете разрабам "платных" движков? Вам бесплатных мало?

    У нас нет полностью функционала

    Вы не найдете полностью готового под ваши задачи продукта. Все равно что то допилить придется. Хотя бы даже состыковывать готовые модули, если они уже есть. Проблема с php движками в том, что они написаны как попало. Иногда даже документации нет. Это наколенные поделия. Посмотрите на это.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    ООП сейчас основная производственная парадигма

    Большинство не могут ошибаться?

    Мнение большинства - всегда ошибочно, ибо большинство людей...

    Дальше цитировать не буду, чтобы не нарушить правила.

    Вообще ООП-шный код даже на незнакомом языке зачастую выглядит вполне понятным.

    Он только выглядит понятным. Такой код состоит из множества запутанных изменяемых состояний, а это зло. Никакого выигрыша не дает, только усложняет, прибавляет лишнего кода.

    Если бы все было так просто, но синтетические тесты мало информативны на практике.

    Известная мантра. Любой реальный пример ее опровергает.

    Это запросы к php или статика тоже?

    Plain text. Не имеет значения. Никогда FPM даже не приблизится к производительности workerman или подобных апликейш серверов.

    Не поверю, что веб-сервер на php отдает статику быстрее nginx.

    Не знаю, не тестил, но вообще, сервера на C++ могут быть медленнее серверов на Go. И даже медленнее серверов на Node.js (uWebsockets.js). Просто потому, что хуже написаны. Вы ведь не заботитесь о производительности, правильно понимаю? И другие не заботятся. Просто пишут код и всё. Опытных системных программистов мало. Поэтому в 2025 году большинством используется устаревший во всех смыслах FPM. Заметьте, большинством. Так как большинство всегда ошибочно.

    А если у нас сайт, то там большая часть это статика.

    Смотря что понимать под сайтом. И смотря как будет устроен этот сайт. Блог это сайт? Блоги на Next.js даже без оптимизаций значительно производительней чем такие же, использующие php-fpm.

    Ок, допустим это api, и все запросы к php, "50 000 запросов в секунду" - это 20мкс на запрос, "4 500 запросов в секунду" - это 222мкс на запрос.

    Так это на 1 ядре! На 8 ядрах ~300-400к rps. То есть во много раз превосходит fpm + nginx. И это всего лишь hello world. Будь что сложнее, fpm и 1000 rps не покажет. Это вообще смешно.

    За сколько у нас отрабатывает api-запрос, не беря тяжелое и совсем легкое, в среднем 50-100мс.

    За столько Next.js полноценную страницу отрисовывает.

    И это мы еще не тестировали как себя поведет php-шный вебсервер при реальных запросах, где работа с базой, ошибки, а иногда и фатальные и т.д. К примеру, fpm очень хорошо шарит память между своими процессами, а на сколько хорошо workerman это делает?

    FPM в реальных приложениях показывает <1000 rps и все другие показатели соответствуют. Это как сравнивать скорость велосипеда и автомобиля.
    Написано
  • Какой современный движок интернет-магазина выбрать?

    @azuf
    Biff, много чего есть, смотрите гитхаб. Medusa.js, Umbraco, Next.js Commerce + любая headless cms или бекенд какой нравится. И еще куча современных движков/фреймворков.
    Написано
  • Износ или перегрев повредили вилку?

    @azuf
    Искра это нормальное явление (даже на сайте Asus об этом сказано). В смысле, небольшая короткая искра. Это конечно не говорит о том, что розетка в порядке.
    Написано
  • Износ или перегрев повредили вилку?

    @azuf
    Розетку нужно смотреть. Или ослабли или загрязнились контакты. Если не исправить, то вилки сплавятся полностью.
    Написано
  • Какой современный движок интернет-магазина выбрать?

    @azuf
    1. OpenCart

    Отсутствие документации. Мало расширений. Почти не развивается.

    2. WooCommerce

    Развивается, документация в порядке, куча плагинов. Неудобен в разработке. Неизлечимая родовая травма вордпресса.

    На PHP нормальных движков нет, только кривые наколенные поделия из 90-х. На других языках есть.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    объекты не в вакууме существуют, их чтото создает и передает необходимые данные

    Я же и спрашивал про $buffer. Код в ООП стиле сложно понять. По крайней мере мне. Код библиотеки/фреймворка преимущественно состоит из каких то деклараций. Они просто объявлены, но ничего не делают. Между ними передается какое то состояние. Отследить его путь крайне сложно. Может у меня подход не правильный, не знаю. Какой в этом смысл? Это же усложнение. Никаких преимуществ. Видимо Дейкстра был прав, сказав, что ООП плохая идея, которую могли придумать только в Калифорнии.

    А нужно передавать buffer, т.е. сырые данные запроса http.

    Это понятно. Почитал немного документацию, там кое что объясняется про объект запроса.

    В Workerman гдето есть код по созданию объекта класса Request, и есть вызов onMessage с передачей туда Request.

    Это тоже понял, почитав код.

    Обработка http-запросов демоном на php скорее всего будет менее производительно чем через php-fpm

    Откройте Techempower benchmark. Вчера тестировал workerman с помощью wrk, на одном ядре 50 000 запросов в секунду, на нескольких ядрах сотни тысяч. FPM с Nginx и стандартными настройками показывает 4 500 запросов в секунду.

    Зря, не разберетесь с ООП, дальше не сможете продвигаться.

    Буду разбираться. Посоветуйте что нибудь практичное для обучения. Чтобы по больше практики. От толстых книг клонит в сон.

    Так у вас уже создан экземпляр класса, Workerman его создал. Весь смысл ООП, что вам не нужно вникать, что и как там делал Workerman - вам не нужно самому парсить запрос http, у вас есть есть готовый объект Request, с набором функций-методов, для удобного получения различных параметров запроса.

    Понемногу складывается понимание. Спасибо за помощь!
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    зачем взяли этот проект?

    Потому что он позволяет использовать PHP как полноценный язык, способный держать постоянный процесс. Что дает много новых возможностей, в отличие от общепринятой CGI модели использования PHP, когда процесс запускается отдельным веб-сервером, а после процесс умирает. И дает еще и увеличение производительности. И потому что он проще чем Swoole.

    Для изучения ООП можно что-нибудь по проще, тем более что Workerman хреново написан и по нему не стоит изучать ООП.

    У меня нет цели изучать именно ООП. Моя цель разобраться с Workerman. Мне непонятно как изучать ООП. Я вижу класс Request, везде учат, что нужно создавать экземпляр объекта от класса, а тут выясняется, что просто так объект Request не создашь. То есть чтобы понять как работать конкретно с таким классом, нужно сразу углубляться в какие то тонкости, как это сделать непонятно, так как во всех книжках одна и та же общая информация.

    роутер от какого-нибудь фреймворка или пакета?

    Нет, буду писать свой, усложняя по мере необходимости.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    Vitsliputsli, то есть нельзя создать экземпляр Request? Здесь Request используется вне onMessage, правда класс наследуется от исходного. Не знаю важно ли это, плохо разбираюсь в работе конструкций классов и объектов. Можно как то понять как и когда возникает объект request? Про буфер я так и не понял, что он из себя представляет, откуда, когда и как берется. Мне сложно мыслить объектами, потому что они имеют какое то состояние, нужно понимать когда и где оно возникает, и как, когда, и где изменяется. Мне проще мыслить функциями как черными ящиками. Принимает и возвращает значение. Так же можно построить всю программу, максимально исключив изменение состояний.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    что пробрасывается buffer можно найти по ProtocolInterface::decode, например

    К сожалению, не понял что пробрасывается и причем здесь приведенный код.

    не понимаю зачем, куда, когда..

    Обрабатывать маршруты в роутере. В реквесте есть и другая нужная информация. Зачем засорять onMessage не относящейся к нему логикой?

    или сохранить в переменную

    Я и хотел сохранить в переменную, только не в методе onMessage, а используя экземпляр объекта.
    Написано
  • Как правильно создать объект класса Request в Workerman?

    @azuf Автор вопроса
    Виктор, что значит сам создаст? Мне нужно получить uri не в методе onMessage. Я почитал, что это появилось в PHP8, а как все таки создать экземпляр, если не понимаешь что передать в конструктор?
    Написано
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    Alfieros, такое же по результату решения я и сам смог написать, на флоатах. И кода потребовалось меньше. Только если прижать правый пункт меню к краю, расстояния между пунктами уже не будут равными. Вопрос в том и состоит, можно ли сделать на блоках, но без флексов и гридов. Похоже что никак.
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    xdevelx, напишите это в отдельном ответе на вопрос и я выберу его как решение. Если хотите конечно. Мне именно это хотелось узнать, можно ли вообще и насколько сложно.
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    Потому что могу и потому что хочу. Вы когда чему то учитесь, всегда делаете только как правильно?
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    Спасибо, но хочется понять как без флексов и гридов.
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    Вы уверены, что .nav-justified работает так как требуется в задании? Мне не удалось быстро найти в исходниках 3-го бутстрапа как это реализовано. В 4-ом сделано на флексах.
  • Можно ли реализовать такое меню без флексов?

    @azuf Автор вопроса
    По запарке забыл прописать класс menu к тегу nav. Получилось вот что. Не понял зачем вы жестко прописали ширину. Как это должно помочь?