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

OSCHINA-MIRROR/cc_1234-Group-Co

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
service.md 4.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 11:43 b1fd262

Сервис

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

    При разработке модуля сервиса также необходимо обратить внимание на проблему освобождения памяти. Кроме того, нельзя использовать асинхронные сервисы, этот модуль выполняется синхронно.

    Таким образом, вы можете написать интерфейс сервиса традиционным способом. Конечно, вы также можете использовать некоторые встроенные асинхронные методы задач для реализации map-reduce, чтобы улучшить пропускную способность интерфейса.

1. Запуск сервиса, например, выполнение app/service user, откроет доступ к публичным функциям всех открытых модулей сервиса.

2. С помощью консоли можно автоматически инициализировать сервис:

app/console generate:service demo

3. Краткое описание структуры созданного каталога сервиса (на примере User):

  • Dao

    • Impl (реализация интерфейса слоя данных)

      • UserDaoImpl.php (реализация интерфейса)
    • UserDao.php (интерфейс)

  • Service

    • Impl (реализация интерфейса сервисного слоя)

      • UserServiceImpl.php (реализация интерфейса)
    • Rely (определение зависимостей между сервисами)

    • UserService.php (интерфейс)

Класс сервиса

$this->createDao($serviceName)

Создаёт экземпляр класса dao.

$this->createService($serviceName)

Создаёт экземпляр класса service.

// Возвращает экземпляр интерфейса UserDao в модуле User
public function getUserDao()
{
    return $this->createDao("User:User");
}

// Возвращает экземпляр интерфейса UserProfileService в модуле User
public function getUserProfileService()
{
    return $this->createService("User:UserProfile");
}

Асинхронные многозадачные задачи

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

    // Однопроцессная медленная задача, выполненная асинхронно с использованием многозадачного подхода, скорость увеличится вдвое
    public function getUsersCache($ids)
    {   
        // Асинхронный многозадачный режим. Занимает 8 мс
        foreach ($ids as $id) {
            $this->task('User\User::getUser', ['id' => $id]);
        }

        return $this->finish();

        // Нормальный режим занимает 250 мс
        // $users = [];
        // foreach ($ids as $id) {
        //     $users[] = $this->getUser($id);
        // }

        // return $users;
    }

С помощью методов

$this->task($cmd, $data),

$this->finish()

реализуется:

  • Обратите внимание, что интерфейс, реализованный таким образом, не может быть вызван внутри. Следующий способ вызова не будет работать:
public function getUser($id)
{
     $user = $this->getUserDao()->getUser($id);
     
     // В этом случае данные не могут быть возвращены нормально.
     $user['users'] = $this->getUsersCache([1,2,3]);
     
     return $user;
}

// Однопроцессная медленная задача, выполненная асинхронно с использованием многозадачного подхода, скорость увеличится вдвое
public function getUsersCache($ids)
{
     // Асинхронный многозадачный режим. Занимает 8 мс
     foreach ($ids as $id) {
     $this->task('User\User::getUser', ['id' => $id]);
     }
     
     return $this->finish();

}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/cc_1234-Group-Co.git
git@api.gitlife.ru:oschina-mirror/cc_1234-Group-Co.git
oschina-mirror
cc_1234-Group-Co
cc_1234-Group-Co
master