1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/yurunsoft-IMI

03.03.2025 17:09
GitLife Service Account

Улучшения

Оптимизация

  • Оптимизация решения проблемы с большим количеством кэшированных Statement (#464)

  • Оптимизация значения операции limit() в конструкторе запросов через подготовленные привязки

  • Оптимизация пагинационных запросов путём удаления сортировки при подсчёте количества записей для повышения производительности

Последнее сообщение коммита: 修正文档
03.03.2025 17:09
GitLife Service Account

v2.1.0

2022 год принёс долгожданное выхода imi 2.0 после продолжительной разработки. Версия была выпущена и прошла ещё четыре месяца доработки, что привело к её относительному стабильному состоянию.

imi версии 2.0 и 1.3 являются LTS (Long Term Support) версиями, обеспечивающими постоянную поддержку в виде исправлений ошибок и безопасности. Новых функциональных обновлений не планируется, а также нет временного плана прекращения поддержки этих версий.

imi v2.1.0 представляет две новые возможности: макросы и асинхронные логи. Также минимально поддерживаемый Swoole был повышен до версии v4.8, требования к PHP остались прежними — PHP >= 7.4.

Асинхронные логи

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

Для активации этого режима достаточно добавить 'async' => true в конфигурацию @app.logger.

Эта возможность работает только при использовании Swoole.

Макросы

Поддержка макросов в imi фреймворке.

Можно использовать макросы аналогично C/C++, чтобы выполнять предварительную компиляцию кода на этапе выполнения.

Это позволяет легко совместимо работать с различными версиями и окружениями PHP.

Используя заранее определённые константы, можно повысить производительность и уменьшить количество условных проверок во время выполнения программы.

Этот компонент основан на Yurunsoft/php-macro, который был разработан командой Yurun.

Это экспериментальная новая функциональность, представленная в imi v2.1.0

Composer

Проект может быть установлен через composer, следуя правилам автоматической загрузки PSR-4. Добавьте следующую информацию в ваш composer.json:

{
    "require": {
        "imiphp/imi-macro": "~2.1.0"
    }
}

Поддерживаемые макросы

Файловые форматы

Поддерживаемые расширения файлов: *.php, *.macro

.php

Необходимо добавить строку # macro в любом месте файла.

Эта строка должна быть расположена на отдельной строке без пробелов перед ней.

При запуске A.php будет создан новый файл A.php.macro.php в том же каталоге.

.macro

Создайте файл A.php с пустым содержимым.

Затем создайте файл A.macro и напишите в него PHP код.

При запуске будет создан новый файл A.macro.php в том же каталоге.

Константы

Макрос: #define, #const, #ifdef, #ifndef

Пример:

#ifndef IN_SWOOLE
    # define IN_SWOOLE extension_loaded('swoole')
#endif
#ifdef IN_SWOOLE
#if IN_SWOOLE
\Co\run(function(){
    echo 'hello world';
});
#endif
#endif

Внимание: константы, определенные с помощью макросов, действуют только на этапе генерации кода, но не влияют на его выполнение.

Условные конструкции

Макрос: #if, #else, #elif, #endif

Пример:

<?php
#if version_compare(PHP_VERSION, '8.0', '>=')
function test(): string|false
#else
/**
 * @return string|false
 */
function test()
#endif
{
    return 'hello world';
}

Код, сгенерированный при работе с PHP >= 8.0:

<?php
function test(): string|false
{
    return 'hello world';
}

Код, сгенерированный при работе с PHP < 8.0:

<?php
/**
 * @return string|false
 */
function test()
{
    return 'hello world';
}
Последнее сообщение коммита: 更新文档[no ci]
03.03.2025 17:08
GitLife Service Account

Улучшения

  • Поддержка горячего обновления для перезагрузки конфигурационных файлов

  • Добавлены методы Server::getConnections(), Server::getConnectionCount() (#203)

  • Поддержка динамического записи данных в модели, но не поддерживаются toArray() и сериализация

  • Поддержка отслеживания SQL с возможностью поймать исключения

  • Поддержка вывода информации о сети при запуске окружения Workerman

Функционал with() для предварительной загрузки связей

Этот выпуск реализует функционал предварительной загрузки связей с использованием with(). Это позволяет уменьшить количество запросов и повысить производительность.

  • Поддерживается установка with=true в аннотациях связи для автоматической предварительной загрузки

  • Поддерживается установка withFields={"указанные поля сериализации"} в аннотациях связи

  • Поддерживается вызов метода with() после Model::query() для указания атрибутов предварительной загрузки

  • Поддерживается вызов метода with() после Model::query() для указания атрибутов предварительной загрузки со связанными обратными вызовами

  • Поддерживается вызов метода withField() после Model::query() для указания полей сериализации для полученной модели

  • Поддерживается предварительная загрузка при вызове Model::queryRelationsList()

Оптимизация

  • Улучшение опыта разработки (#197)

  • Оптимизация производительности сканирования файлов в Swoole

  • Совместимость с отключенным режимом коротких имён в Swoole

  • Оптимизация обработки пути приложения AppContexts::APP_PATH как абсолютного пути

  • Улучшение обработки ошибок парсинга JSON

  • Улучшение юнит тестов (#202)

  • Переработка HTTP маршрутов для повышения производительности (#200)

  • Улучшение сообщений об ошибках при работе с типом ArrayList

  • При создании моделей методы get() для полей типа json теперь используются для возврата значений по ссылке, что упрощает изменение данных

  • Улучшение некоторых частей кода

Временные решения

  • Исправление проблемы срабатывания конфигураций @app.overrideDefaultIgnoreNamespace и @app.overrideDefaultIgnorePaths

  • Исправление проблемы инициализации URI при вызове setUri()

  • Исправление проблемы преобразования компонента управления правами в древовидную структуру (#201)

  • Исправление проблемы обработки сессий с пустым ID как действительных

  • Исправление проблем парсинга пустых сессий JSON

  • Исправление работы Swoole RedisServerUtil

  • Исправление проблемы получения packetData из контекста запроса для протокола UDP в Workerman

  • Исправление проблемы использования параметра fields в аннотациях ManyToMany, PolymorphicToMany и PolymorphicManyToMany

Последнее сообщение коммита: 更新文档 [no ci]
03.03.2025 17:07
GitLife Service Account

imi v2.0 выпущена, это PHP-фреймворк для распределённой разработки с долгоживущими соединениями

введите описание изображения здесь

imi v2.0

Описание фреймворка

imi — это фреймворк для PHP, поддерживающий долгоживущие соединения и микросервисы в распределённой среде. Он может работать в контейнерах PHP-FPM, Swoole и Workerman.

imi позволяет создавать HTTP-интерфейсы, а также постоянные службы, такие как HTTP2, WebSocket, TCP, UDP и MQTT.

imi имеет множество функциональных компонентов, и версия v2.0 включает два решения для распределённых долгоживущих соединений.

Фреймворк imi уже используется в следующих проектах:

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

Первый выпуск imi состоялся 21 июня 2018 года.

  • GitHub: [https://github.com/imiphp/imi]
  • Gitee: [https://gitee.com/yurunsoft/IMI] (GVP проект)
  • Документация: [https://doc.imiphp.com/]
  • Видео презентации imi v2.0:
    • Zhihu: [https://www.zhihu.com/zvideo/1404410018154770432]
    • Bilibili: [https://www.bilibili.com/video/BV1Bv411E7ce/]

Благодарность

Благодарю всех разработчиков за тестирование imi 2.0, предложения и отчеты об ошибках!

Спасибо @Gumo666, @NHZEX и @loyating за вклад в документацию и код imi.

Об авторе

Юрунь (Чжан Юньью) родился 12 марта 1994 года (День леса) в Уси.

Учился программированию самостоятельно ещё в 8 классе. Люблю C#, но судьба распорядилась иначе, и теперь я работаю с PHP.

Основатель фреймворка imi, участник группы разработчиков Swoole, автор серии компонентов Yurun PHP.

Открытые проекты включают imi, PaySDK, YurunHttp, Guzzle-Swoole, YurunOAuthLogin, ChineseUtil и другие.

Описание версии 2.0

  • Поддержка нескольких контейнеров: Swoole, Workerman, PHP-FPM и другие
  • Распределённая модель: решение для долгоживущих соединений без необходимости сложного понимания
  • Высокая производительность: постоянное пребывание в памяти + JIT PHP 8.0
  • Настоящее поколение: следующий поколёние PHP-фреймворк (идеология совместимости с несколькими контейнерами Laravel Octane)

Версия 2.0 находится в стадии тестирования и скоро будет выпущена официально.

Быстрое начало работы

Создайте проект HTTP-сервера: composer create-project imiphp/project-http

Создайте проект WebSocket-сервера: composer create-project imiphp/project-websocket

Создайте проект TCP-сервера: composer create-project imiphp/project-tcp

Создайте проект UDP-сервера: composer create-project imiphp/project-udp

Требования к окружению

  • PHP 7.4, 8.0
  • Swoole >= 4.7
  • Windows, Linux, MacOS

Новые возможности

  • Поддержка аннотаций PHP 8.0 (поддерживаются старые формы записи)
  • Встроенное решение для распределённых долгоживущих соединений, способствующее развитию экосистемы IoT на PHP
  • Поддержка нескольких контейнеров: Swoole, Workerman, PHP-FPM, Cli
  • Решение болевых точек: beanScan, Main классы и другие стали необязательными
  • Решение болевых точек: методы setXXX добавлены на основе PSR-7, полностью совместимы с PSR-7
  • Командная строка использует symfony/console
  • Логирование использует monolog/monolog
  • и многое другое...

Разработка

  • Отказались от неразумных и избыточных частей версии 1, упрощены конфигурации, идея быстрой разработки остаётся актуальной
  • Передача некоторых функций более зрелым сторонним библиотекам, imi выполняет свою миссию
  • Полное использование строго типизированного кода, гарантирующее качество кода
  • Переработка базовой части, чтобы фреймворк мог работать в различных контейнерах (Swoole, Workerman, PHP-FPM и другие), что делает его удобным для расширения
  • Концентрация на повышении качества разработки распределённых долгоживущих соединений, что является недостатком существующих фреймворков, они используются только для создания HTTP-служб, так использовать Swoole и Workerman просто преступление

Поддержка аннотаций PHP 8.0

введите описание изображения здесь

Решение для распределённых долгоживущих соединений

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Пример использования: [https://github.com/imiphp/imi-project-websocket];

Будущие планы

  • Добавление поддержки большего количества компонентов для работы вне Swoole
  • Поддержка Swow и RoadRunner
  • Расширение решений для распределённых долгоживущих соединений, включая больше сообщений промежуточных шлюзов
  • Создание и глубокая интеграция новых микросервисных компонентов
  • Бесплатные видеоуроки по imi v2, анализ исходного кода и другие материалы

Приглашение к открытому коду

  • Большинство программ, которые мы используем каждый день, являются открытыми (VSCode, PHP, Nginx, MySQL, Redis и другие).
  • Я очень хочу, чтобы больше людей могли принять участие в открытых проектах, таких как imi, и сделать свой вклад в развитие PHP-экосистемы!
  • Порог участия в открытых проектах невелик, ваше использование, отзывы, предложения, исправления ошибок и внесение кода — всё это помогает проекту расти.
  • Открытый код не означает бесплатное использование, взлом или бескорыстное сотрудничество, берегите то, что вы имеете...
Последнее сообщение коммита: 更新文档
03.03.2025 17:03
GitLife Service Account

Несколько слов

Разработка версии imi v2 уже началась (2020-09). Если у вас возникнут какие-либо вопросы, пожалуйста, свяжитесь с нами!

Планы и последние новости imi v2: https://github.com/Yurunsoft/imi/issues/66

imi официально вошел в список проектов GVP на Gitee, так что следите за ними там! (https://gitee.com/yurunsoft/IMI)


Журнал обновлений

Улучшения

  • В аннотациях маршрутов добавлен параметр paramsBody, поддерживающий выбор маршрута из JSON или XML.

  • В аннотациях маршрутов добавлен параметр paramsBodyMultiLevel, позволяющий указывать, является ли маршрут многоуровневым.

  • Добавлено проверение повторяющихся маршрутов через UDP.

  • Добавлено проверение повторяющихся маршрутов через TCP.

  • Добавлено проверение повторяющихся маршрутов через WebSocket.

  • Добавлено проверение повторяющихся маршрутов через HTTP.

Оптимизация

  • Оптимизирован код.

Исправление ошибок

  • Исправлено проблемное поведение при отправке данных в событии OnOpen в WebSocket.

  • Исправлены проблемы в методах Server->hasGroup() и Server->getGroup().

  • Исправлены проблемы с проверкой значений по умолчанию для параметров методов.

  • Исправлены проблемы с использованием одного соединения несколькими корутинами после включения механизма heartbeat в пуле соединений.

Последнее сообщение коммита: 更新文档
03.03.2025 17:03
GitLife Service Account

Несколько слов

Этот выпуск уже включает совместимость с PHP 8.0, а также тестирование автоматизации для PHP 8.0.


Разработка версии imi v2 началась (сентябрь 2020 года). Если вы столкнулись с какими-либо проблемами, пожалуйста, свяжитесь с нами!

Планирование и последние новости imi v2 версии: https://github.com/Yurunsoft/imi/issues/66

imi официально вошел в список проектов GVP на Gitee, так что следите за нами там! (https://gitee.com/yurunsoft/IMI)


В ноябре я провёл две недели в больнице, что привело к отсутствию новых коммитов и выпусков. Сейчас я чувствую себя хорошо и возобновил работу над проектом!

Журнал обновлений

Улучшения

  • Добавлена аннотация регулярной проверки

  • Добавлен RequestContextProxy

  • Добавлены события до и после связывания моделей

Все новые возможности можно найти в документации.

Оптимизация

  • Автоматическое тестирование перешло с Travis CI на GitHub Actions

  • Добавлено условие проверки fd при работе с контекстом соединения

  • Улучшено сообщение об ошибке при использовании ключа кэширования, который не является строкой

  • Удалены лишние параметры привязки из модели генератора

  • Добавлен повторный запуск для некоторых нестабильных тестов

Временные решения

  • Исправлено получение атрибутов в RequestProxy

  • Исправлено получение workerID в Server::sendMessage()

  • Исправлено отключение кодировки в драйвере Mysqli #71

  • Исправлено сообщение об ошибке mysqli: mysqli::next_result(): There is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/method

Последнее сообщение коммита: 优化测试用例
03.03.2025 17:02
GitLife Service Account

Несколько слов

Учитывая ваш интерес и потребность, версию imi v1 продолжили развивать функционально до выпуска версии v2. Если вам что-то нужно, обязательно сообщите нам!

Работа над версией imi v2 уже началась (сентябрь 2020 года). Если возникнут какие-либо вопросы, пожалуйста, свяжитесь с нами!

Последние планы и новости по версии imi v2: https://github.com/Yurunsoft/imi/issues/66

Проект imi официально вошел в список лучших проектов на платформе Coding (GVP): https://gitee.com/yurunsoft/IMI

Проголосуйте за imi: https://www.oschina.net/project/top_cn_2020#imi

Журнал обновлений

Улучшения

  • Добавлен новый тип поля модели — список.

  • Добавлена поддержка внедрения и аннотаций для методов с модификатором protected.

Оптимизация

  • Оптимизация: при выбросе исключения в событиях транзакций базы данных события очищаются.

Исправление ошибок

  • Исправлено удаление директорий: теперь при удалении директории не удаляется также и каталог, на который указывает символическая ссылка.
Последнее сообщение коммита: 格式化代码
03.03.2025 17:02
GitLife Service Account

Несколько слов

Учитывая ваш интерес и потребность, версию imi v1 продолжили развивать до выпуска версии v2. Если вам что-то нужно, обязательно сообщите нам!

Работа над версией imi v2 уже началась (сентябрь 2020 года). Если возникнут какие-либо вопросы, пожалуйста, свяжитесь с нами!

Последние планы и новости по imi v2: https://github.com/Yurunsoft/imi/issues/66

imi официально вошел в список проектов GVP на платформе Coding, так что вы можете следить за ними там! (https://gitee.com/yurunsoft/IMI)

Проголосуйте за imi: https://www.oschina.net/project/top_cn_2020#imi

Обновление

Улучшения

  • Введен стандарт форматирования кода

  • Класс Random теперь генерирует случайные символы, поддерживаются случаи, когда передается только $min, используя фиксированную длину #68

Оптимизация

  • По умолчанию значение конфигурационной опции requestResourceCheckInterval соединения было изменено с 3 на 30, также допускается установка значения null для отключения ограничений

  • Произведены некоторые оптимизации кода

Исправления

  • Исправлены проблемы совместимости с PHPUnit

  • Исправлены проблемы совместимости с $_SERVER в некоторых случаях

  • Исправлены некоторые орфографические ошибки

Последнее сообщение коммита: 修正错别字
03.03.2025 17:02
GitLife Service Account

Эта неделя также прошла в удалённой работе, занимаясь различными проектами. Обновление концепции Partial очень мощное и полезное, рекомендую ознакомиться.

Видео-уроки imi обновлены до девятой серии "Модели и ORM": https://www.bilibili.com/video/av78158909/

Обновления

Улучшения

Оптимизации

  • Улучшение класса пула соединений Redis

  • Улучшение проверки пароля при подключении Redis, теперь пустая строка не приведёт к попыткам входа с использованием пароля

  • Улучшение кода модели дерева

  • Улучшение логики горячего обновления процесса

Исправления

  • Исправление ошибки при отсутствии директории Inotify для горячего обновления

Partial

Концепция Partial в imi была заимствована из C#. Partial позволяет разделить один класс на несколько файлов для записи.

На данный момент PHP версии 7.4 ещё не поддерживают концепцию Partial на уровне языка.

Однако благодаря мощному контейнеру объектов imi удалось реализовать концепцию Partial в PHP.

Использование очень простое — используйте trait, добавьте аннотацию @Partial, чтобы легко внедрять его.

Сценарии использования Partial

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

  • Когда методы класса многочисленны и трудно разделить их, разбиение на несколько файлов поможет лучше поддерживать код.

  • Для некоторых классов, созданных с помощью инструментов, если вы добавите свой код, а затем снова сгенерируете часть содержимого, ваш код будет затёрт. Используя Partial в другом файле, можно избежать этого.

Перед введением концепции Partial в imi, генератор моделей ими помещал сгенерированный код в родительский класс, а пользователи продолжали разрабатывать свои классы как потомков.

Последнее сообщение коммита: 优化 Redis 连接池资源类
03.03.2025 17:01
GitLife Service Account

Первую неделю работы из дома быстро заполнили дела...

Эта неделя принесла множество новых пользователей в imi, каждый вход, отзыв и вклад делает imi всё более мощной и совершенной.

Уверены, что imi будет становиться всё удобнее и сильнее!

Улучшения

  • Поддержка аннотаций для проверки символов в тексте #46

  • Добавлен метод контроллера __render(), который улучшает опыт разработки при работе с отображением страниц Документация

  • Поддержка планировщика задач, позволяющая выполнять задачи при каждом запуске сервиса, установив значение атрибута force Cron аннотации как true Документация

Оптимизация

  • Удалён один блок try

  • Удалён вызов функции eval(), заменён безопасным альтернативным методом Документация

  • Улучшение вывода логов консоли

  • Изменение времени загрузки файла .env, теперь можно использовать функции getenv() и imiGetEnv() для получения значений в конфигурационных файлах #41

Временные решения

  • Исправление проблемы преобразования полей типа bit модели в некоторых сценариях

  • Исправление ошибки типизации параметров события после сохранения модели

  • Исправление ошибки запуска проекта при наличии специального пути

  • Исправление ошибки "Call to a member function closeCursor() on null" при возникновении ошибки SQL

  • Исправление проблемы использования пользовательского пула соединений при массовом обновлении модели

  • Исправление проблемы игнора значения poolName в аннотации модели [#40]

  • Исправление проблемы отсутствия значения параметра poolName в аннотации Table генератором моделей [#38]

Последнее сообщение коммита: Text 注解支持字符验证 #46
03.03.2025 17:01
GitLife Service Account

Улучшения

  • Добавлен метод Imi::getNamespacePaths() для получения всех путей названий пространства имён.

  • Добавлена функция File::absolute(), которая эффективна даже в случае отсутствия файла, в отличие от функции realpath().

  • Поддержка загрузки конфигурационного файла .env при использовании нескольких директорий для проектных пространств имён.

  • Поддержка множества значений allowOrigin в кросс-доменной промежуточной службе OptionsMiddleware.

Оптимизация

  • Улучшение сценария использования нескольких каталогов для указания пространства имён.

Временные решения

  • Исправление проблемы с альтернативными именами процессов при запуске через менеджер.

  • Исправление проблем с прокси-классом ответа в контексте корутин.

Последнее сообщение коммита: 更新文档
03.03.2025 17:00
GitLife Service Account

Приготовьтесь встретить Новый год (отдыхаем), в версии перед новогодними праздниками. После отдыха продолжим обновления.

  • Добавлен локальный обработчик контекста соединения: ConnectContextLocal, который может использоваться в режиме SWOOLE_BASE.

  • Добавлена документация для ElasticSearch.

  • Проблема исправлена.

  • Устранены предупреждения DEPRECATED.

Последнее сообщение коммита: 更新连接上下文文档
03.03.2025 17:00
GitLife Service Account
  • Выбросить исключение при неудачной идентификации пути рабочей директории во время выполнения

  • Добавить проверку обязательного включения параметра swoole.use_shortname для предотвращения проблем, возникающих при использовании других фреймворков, что может помешать правильному запуску imi

  • Добавлен метод Db::transContext()

  • Поддержка получения объекта процесса, запущенного вместе с сервисом, #35

Последнее сообщение коммита: 运行时目录路径默认识别失败时抛出异常提示
03.03.2025 17:00
GitLife Service Account

Недельные заметки

Эта неделя принесла компонент imi-jwt, который позволяет легко использовать JWT в рамках фреймворка imi.

Однако JWT отнюдь не является заменой сессий!!! Об этом следует помнить всем!!!

За последнее время было много работы над проектами, естественно, используя фреймворк imi... Желаю вам иметь здоровую шевелюру в 2020 году!

Бесплатные видеоуроки

[Урунь] Курс для новичков по работе с фреймворком imi на основе PHP + Swoole | Обновление каждую пятницу | От лысины до пышной шевелюры, чтобы вы имели больше времени для работы и отдыха, а также возможность найти вторую половинку

Перейти к бесплатному курсу "От лысины до пышной шевелюры" по фреймворку imi https://www.bilibili.com/video/av78158909

Каждую пятницу вечером выходят новые эпизоды~

Лог обновлений

Улучшения

  • Добавлен компонент imi-jwt, позволяющий легко использовать JWT в рамках фреймворка imi (Подробнее)

  • Добавлена поддержка слушателей событий завершения и откатывания транзакций (Документация)

  • Теперь метод Event->off() может вызываться без передачи второго параметра, что позволяет очистить все слушатели события (Документация)

  • Поддержка аннотаций для контроллеров и действий WebSocket для ограничения маршрутов рукопожатия (например, только при рукопожатии определенного URL можно запустить обработку) (Документация)

  • При рукопожатии WebSocket URI объект записывается в ConnectContext

  • Добавлен TNotRequiredDataToProperty, который позволяет не передавать параметры конструктора, как и TDataToProperty

Оптимизация

  • Рефакторинг: разделение объектов управления транзакциями баз данных

  • Оптимизация генерации классов Facade, теперь параметры и значения возвращаемых значений могут быть null, а также поддерживаются значения по умолчанию для параметров

  • Оптимизация сообщений об ошибках при отсутствии основного класса

Исправления

  • Исправлено поведение записи контекста соединения после ответа на рукопожатие, которое иногда приводило к некорректным данным в контексте соединения сразу после рукопожатия

  • Исправлен баг с откатом вложенных транзакций

  • Исправлены проблемы типизации параметров в некоторых случаях

  • Исправлены проблемы записи метода ConnectContext::multiSet()

  • Исправлены конфликты конфигурации при использовании HTTP-сессий несколькими службами

Последнее сообщение коммита: 更新文档
03.03.2025 16:59
GitLife Service Account

Недельные новинки

Эта неделя принесла с собой компонент imi-amqp, который позволяет использовать очередь сообщений, поддерживающую протокол AMQP, такие как RabbitMQ, в рамках фреймворка imi.

Теперь вы можете использовать очереди сообщений в рамках фреймворка imi!

Бесплатные видеоуроки

[Урок] Введение в фреймворк imi на основе PHP + Swoole для начинающих | Обновление каждую пятницу | От лысины до пышной шевелюры, чтобы вы имели больше времени для работы и отдыха, а найти пару стало мечтой

Нажмите здесь, чтобы бесплатно посмотреть видеоуроки от лысины до пышной шевелюры по фреймворку imi https://www.bilibili.com/video/av78158909

Каждый четверг или пятницу вечером мы добавляем минимум один эпизод~

Журнал обновлений

Улучшения

  • Добавлен компонент imi-amqp (ссылка)

  • Поддержка замены точки "." на двоеточие ":" в ключах при использовании кэширования Redis (документация)

  • Поддержка установки префикса для ключей кэша Redis (документация)

  • Улучшение запуска процессов вместе со службой (документация)

Оптимизация

  • Оптимизация некоторых участков кода

Исправления

  • Исправление проблемы с блокировкой ресурсов пула подключений

  • Исправление ошибок, возникающих при проверке сердцебиения пула подключений

  • Исправление проблемы с возвратом метода ping() Redis при версиях расширения 5.x

Последнее сообщение коммита: 更新说明
03.03.2025 16:59
GitLife Service Account

Недельные заметки

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

Бесплатные видеоуроки

[Урюн] Введение в фреймворк IMI на основе PHP + Swoole | Обновление каждую пятницу | От лысины до пышной шевелюры, позволяющее вам больше времени проводить на работе за просмотром воды, а также сделать вашу жизнь без пары мечтой

Перейти к бесплатному просмотру уроков от лысины до пышной шевелюры по фреймворку IMI https://www.bilibili.com/video/av78158909

Обновлено четвертое занятие, минимум одно занятие обновляется каждый четверг~

Журнал обновлений

Улучшено

  • Добавлена возможность ограничения количества записей трассировки в журнале, значение по умолчанию равно -1 (неограниченное количество). Атрибут называется: traceLimit

Оптимизация

  • Улучшение совместимости с macOS и некоторыми версиями Linux

  • Изменение имени файла сокета процесса Cron

Исправлено

  • Исправлены проблемы с классом Bean

  • Исправлены случаи, когда аннотации не работали

  • Исправлены случаи, когда ошибки не регистрировались

  • Исправлены проблемы использования горячего обновления в macOS, теперь используется Unix socket для связи

  • Исправлены проблемы с аннотациями проверки данных callable={@Inject("BeanName"), "methodName"}

  • Исправлены проблемы генерации команд imi в некоторых окружениях

Последнее сообщение коммита: 更新说明
03.03.2025 16:58
GitLife Service Account

Еженедельное обновление

На этой неделе были выполнены оптимизации уровня базовых компонентов, а также исправлены некоторые ошибки, сообщенные пользователями. Подробнее можно узнать в разделе "История обновлений".

На этой неделе вышло два новых видеоурока (2. HTTP запросы и ответы, 3. HTTP middleware): смотреть здесь.

Кроме того, компания imi начала активное развитие в области Интернета вещей, выпустив временную версию ORM для временного базового хранилища данных InfluxDB: GitHub

ORM для временного базового хранилища данных InfluxDB, который завершает эпоху отсутствия ORM для этого типа баз данных.
Поддерживает основные операции, работает с окружением php-fpm и Swoole, легко переключается между различными средами.
Может использоваться во всех традиционных фреймворках и всех фреймворках Swoole!

Приглашаем вас попробовать!

История обновлений

Улучшения

  • Добавлен параметр -runtime команды server/reload, позволяющий обновить кэширование времени выполнения перед перезагрузкой сервиса (Документация)

  • Добавлен параметр $caseSensitive для методов Text::startwith() и Text::endwith(): $caseSensitive = true (Документация)

  • Исключения теперь будут выбрасываться при захвате ошибок в задачах по расписанию.

  • Теперь поддерживаются бесконечные уровни Previous в логах ошибок.

  • Добавлена возможность игнорировать сканирование определённых классов или пространств имён (ignoreNamespace)

  • Добавлен тип медиа MediaType::IMAGE_ICON

  • Класс быстрых действий Redis теперь поддерживает метод evalEx() (Документация)

Исправления

  • Корректировка пульса пула соединений теперь выполняется только для свободных ресурсов, что предотвращает возникновение ошибок при работе нескольких корутин.

  • Исправлено предупреждение в CronProcess.

  • Внесены изменения для улучшения семантики некоторых участков кода.

Оптимизация

  • Оптимизирован класс Statement. Получение последнего ID после выполнения insert или replace происходит только тогда, когда это требуется.

  • Обработчики аннотаций больше не обрабатывают аннотации, отличные от imi, что улучшает совместимость с другими библиотеками.

  • Обновлены пространства имён зависимостей аннотаций.

Последнее сообщение коммита: 新增 evalEx 文档说明
03.03.2025 16:57
GitLife Service Account

Последнюю неделю мы реализовали поддержку HTTP/2, от серверной части до клиентской стороны, как в imi, так и в YurunHttp.

На этой неделе был официально выпущен набор инструментов для разработки сервисов gRPC, gRPC клиента и пула соединений gRPC.

Чтобы сделать ими удобнее работу с фреймворком imi, сегодня мы запускаем курс "Видеокурс для начинающих работы с фреймворком imi", который будет обновляться минимум один раз в неделю.

Ссылка на курс: https://space.bilibili.com/768718/channel/detail?cid=94514

Курс для новичков абсолютно бесплатен! Абсолютно бесплатен! Абсолютно бесплатен!

Обновление лога

Добавлено

  • Поддержка разработки сервисов gRPC (репозиторий кода|документация)
  • Поддержка вызова gRPC клиентских служб
  • Пул соединений gRPC
  • Добавлен базовый класс singleton HTTP контроллера, поддерживающего использование $this->request, $this->response, автоматическое переключение контекста корутин внутри объекта
  • Видеокурс "Начальный видеокурс для работы с фреймворком imi" доступен бесплатно (ссылка)

Улучшено

  • Улучшение middleware действий HTTP
  • Улучшение тестового кода

Исправлено

  • Исправлено несколько мелких проблем
Последнее сообщение коммита: 更新说明
03.03.2025 16:57
GitLife Service Account

Выбор самого популярного открытого программного обеспечения из Китая в 2019 году, проголосуйте за imi!
https://www.oschina.net/project/top_cn_2019#imi

Новые возможности

  • Добавлена поддержка внедрения конфигураций через beans при запуске сервиса

  • Добавлена аннотация @PoolClean, которую можно использовать в методах входа в Tool и Process для удаления или сохранения указанных пулов соединений

  • Добавлена поддержка механизма heartbeat для пулов соединений с возможностью настройки проверки состояния соединений при получении ресурсов

Улучшения

  • Улучшена очистка Statement

  • Улучшена производительность обработки представлений

  • Улучшена эффективность обработки параметров выполнения действий

  • Горячее обновление больше не занимает пул соединений

  • Улучшена производительность преобразования модели в массив

  • Инструмент process/start теперь возвращает код завершения процесса

  • Улучшение: при закрытии пула соединений прекращается heartbeat и освобождается пул ресурсов

  • Автоматическая сборка мусора и heartbeat для пулов соединений могут быть активированы в нерабочих процессах, если есть работающие корутины

Последнее сообщение коммита: 代码优化
03.03.2025 16:57
GitLife Service Account

Новое

  • Добавлен middleware, который позволяет запустить обработку превышения времени выполнения запроса при превышении максимального времени.

  • Добавлена поддержка обработки "роутинг не найден" для протоколов WebSocket, TCP и UDP.

Улучшения

  • Улучшена обработка "роутинг не найден" для HTTP.

  • Улучшена модель, которая не обновляет значение первичного ключа в методе update().

  • Улучшено автоматическое включение протоколов HTTP и WebSocket при прослушивании порта.

Исправление ошибок

  • Исправлено проблемное состояние statement как доступного.

  • Исправлено внедрение целей для ExtractData.

  • Исправлено распознавание протокола в Request->getUri() для http/https/ws/wss.

Последнее сообщение коммита: 新增支持 WebSocket、TCP、UDP 的路由未找到处理
1
https://api.gitlife.ru/oschina-mirror/yurunsoft-IMI.git
git@api.gitlife.ru:oschina-mirror/yurunsoft-IMI.git
oschina-mirror
yurunsoft-IMI
yurunsoft-IMI