Ошибки, которые вы видите, связаны с тем, что ваш запрос к Centrifugo через Yii2 не может быть выполнен из-за проблем с соединением. Давайте разберем несколько возможных причин и решений.
### Возможные причины проблемы
1. **Проблемы с Docker**: Если ваш Yii2-приложение и Centrifugo работают в разных контейнерах, `localhost` внутри контейнера приложения не будет ссылаться на ваш хост. Вместо этого вам нужно использовать имя сервиса или IP-адрес, по которому доступен Centrifugo из контейнера с Yii2.
2. **Проблемы с конфигурацией сервиса**: Убедитесь, что у Centrifugo есть открытый порт и он принимает соединения от вашего Yii2-приложения.
3. **Настройки сети**: Если вы используете Docker Compose, проверьте, правильно ли настроены сети, которые могут позволить контейнерам общаться друг с другом.
### Как это исправить
1. **Используйте имя сервиса или IP-адрес**: Если вы используете Docker Compose, замените `localhost` на имя сервиса Centrifugo. Например, если у вас есть следующий `docker-compose.yml`:
```yaml
services:
centrifugo:
image: centrifugo/centrifugo
ports:
- "8000:8000"
yii2_app:
build: .
depends_on:
- centrifugo
```
Тогда вам нужно использовать `centrifugo:8000` вместо `localhost:8000` в вашем Yii2 коде.
2. **Измените Yii2 код для корректной отправки запроса**:
```php
use yii\httpclient\Client;
try {
$client = new Client();
$response = $client->createRequest()
->setMethod('post')
->addHeaders(['Authorization' => 'apikey ' . $this->apikey])
->setFormat('application/json') // Установите нужный формат, если требуется
->setData([
'method' => 'publish',
'params' => [
'channel' => 'gnRvZBqyCyISSIIQyPdHxKOQkg_1SOuSABLUwWF0RbgeZDs_LSQNOnF-2_wpONqRTxyrkMwyzwMIZa4hew4vypU50gF0ZzW8BHA3',
'data' => ['type' => 'input-set-name', 'uid' => 'onlineCurator']
]
])
->setUrl('http://centrifugo:8000/api'); // замените localhost на имя сервиса
$result = $response->send();
var_dump($result->data); // выводим ответ
die();
} catch (\Throwable $e) {
var_dump($e);
die();
}
```
3. **Проверка статуса**: Убедитесь, что Centrifugo работает и слушает на правильном порту. Вы можете проверить это с помощью `curl` или `Postman` по адресу `http://centrifugo:8000/api` из другого контейнера.
### Заключение
Если после всех этих изменений проблема все еще сохраняется, убедитесь, что Centrifugo действительно принимает запросы. Для этого проверьте его логи и настройки.