Сервис реализуется в сотрудничестве с сервисным центром. Каждый сервис может запускать отдельный сервер для обработки запросов.
При разработке модуля сервиса также необходимо обратить внимание на проблему освобождения памяти. Кроме того, нельзя использовать асинхронные сервисы, этот модуль выполняется синхронно.
Таким образом, вы можете написать интерфейс сервиса традиционным способом. Конечно, вы также можете использовать некоторые встроенные асинхронные методы задач для реализации map-reduce, чтобы улучшить пропускную способность интерфейса.
app/console generate:service demo
Dao
Impl (реализация интерфейса слоя данных)
UserDao.php (интерфейс)
Service
Impl (реализация интерфейса сервисного слоя)
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 )