Проектная лаборатория
Собственный Redis
Этап 87 · Публикация и подписка
Переход в режим подписки
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите перевод клиента в режим подписки.
Режим подписки
После команды подписки клиент входит в «режим подписки». В нём разрешены только команды:
SUBSCRIBEUNSUBSCRIBEPSUBSCRIBEPUNSUBSCRIBEPINGQUIT
Остальные команды сервер отклоняет с ошибкой, например:
$ redis-cli
> SUBSCRIBE channel
1) "subscribe"
2) "channel"
3) (integer) 1
(subscribed mode)> ECHO hey
(error) ERR Can't execute 'echo': only (P|S)SUBSCRIBE / (P|S)UNSUBSCRIBE / PING / QUIT / RESET are allowed in this contextТесты
Тестирующая программа запустит вашу программу так:
$ ./your_program.shЗатем отправит серверу SUBSCRIBE, чтобы перейти в режим подписки:
$ redis-cli
> SUBSCRIBE foo
# Expecting ["subscribe", "foo", 1]После этого тест отправит серию команд, как разрешённых, так и запрещённых в этом режиме.
Для запрещённых команд, например SET, GET и ECHO, тест проверит ответ с ошибкой:
> SET key value
- ERR Can't execute 'set': only (P|S)SUBSCRIBE / (P|S)UNSUBSCRIBE / PING / QUIT / RESET are allowed in this context Проверяется только начало сообщения "ERR Can't execute '<command_name>'", поэтому формулировка может отличаться от точного формата Redis.
Для SUBSCRIBE тест проверит обычный ответ.
> SUBSCRIBE bar
# Expecting ["subscribe", "bar", 2] as RESP-encoded arrayПримечания
- Для запрещённых команд проверка сообщения гибкая: точное соответствие формату Redis не требуется. Проверяется строка
ERR Can't execute '<command>'без учёта регистра. Примеры сообщений, которые пройдут тест:ERR Can't execute 'set' in subscribed modeERR can't execute 'SET' when one or more subscriptions exist
- В режиме подписки
PINGимеет другой ответ, не+PONG\r\n. Это появится позже.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage aw8Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.