Система включает два компонента:
-
Сервер: отправляет задачи Proof-of-Work (челленджи), принимает решения и возвращает цитаты.
Настройка: порт указывается через переменную окруженияPORT
-
Клиенты: подключаются к серверу, решают задачи, отправляют результаты и получают цитаты.
Настройка: подключение определяется черезADDR
(например,server:44542
).
-
Подключение: Клиент соединяется с сервером через TCP (
server:44542
в сетиapp-network
). -
Передача данных:
- Сервер → Клиент:
difficulty
(1 байт) — сложность задачи.challenge
(4 байта) — входные данные для вычислений.
- Клиент → Сервер:
- Решение задачи (
nonce
, 4 байта).
- Решение задачи (
- Сервер → Клиент (успешное решение):
- Длина цитаты (
quote_length
, 4 байта). - Текст цитаты (
quote
, N байт, UTF-8).
- Длина цитаты (
- Сервер → Клиент:
Клиент вычисляет значение nonce
, чтобы удовлетворить условие:
hash(challenge + nonce) >> (hashlen - difficulty) == 0
- Сеть: bridge
- Сервер:
- Работает на порту
44542
, доступен какserver:44542
. - Конфигурация через переменные окружения (
PORT
).
- Работает на порту
- Клиент:
- Подключается к серверу через
ADDR=server:44542
. - Указано 3 реплики по умолчанию (можно масштабировать).
- Подключается к серверу через
docker-compose up --build
docker-compose up --scale client=3
docker-compose down
Клиенты автоматически подключаются к серверу, решают задачи и получают цитаты.
Сложность решения (difficulty
) увеличивается с количеством запросов от пользователя.
Это позволяет адаптировать систему Proof-of-Work, чтобы предотвратить злоупотребления и
обеспечить честное распределение ресурсов.
Пропускная способность зашита в server/main.go в вызове конструктора NewUsers