Skip to content
This repository was archived by the owner on Sep 9, 2021. It is now read-only.

Conversation

Mr-Shpinks
Copy link

@Mr-Shpinks Mr-Shpinks commented Apr 20, 2021

Задание к лабораторной №3, сервер

image

Описание используемого протокола в лабораторной №3

В целом сообщения делятся на сообщения от клиента к серверу и от сервера к клиентам.
В протоколе имеется 2 типа сообщений - для быстрых и долгих операций:

SHT = 0  # быстрые операции: сложение, вычитание, умножение, деление
LNG = 1  # долгие операции: взятие факториала и квадратного корня

Также имеются коды операций, восприятие которых зависит от типа операции, поэтому некоторые коды повторяются:

# Коды быстрых операций
SUM = 0  # сложение
SUB = 1  # вычитание
MUL = 2  # умножение
DIV = 3  # деление

# Коды долгих операций
FAC = 0  # взятие факториала
SQT = 1  # взятие квадратного корня

Формат сообщений от клиента к серверу:

1 byte         1 byte         4 bytes      4 bytes
| тип операции | код операции | аргумент 1 | аргумент 2 (только в коротких операциях) |

От сервера к клиенту есть два возможных типа сообщений - ответы на быстрые и на долгие операции:

# Ответ на быстрые операции
1 byte         1 byte       8 bytes
| тип операции | код ответа | результат

# Ответ на долгие операции
1 byte         1 byte       1 byte         4 bytes                            8 bytes
| тип операции | код ответа | код операции | аргумент (полученный от клиента) | результат

В ответе на долгие операции код операции и аргумент (полученный от клиента) нужны, чтобы клиент понимал, на какой запрос пришёл ответ, так как вычисления могут занять какое-то время.
Код ответа служит для определения успешности операции или причины неуспеха.

# Коды ответа
RESULT_OK = 0  # результат получен успешно
BAD_ARGUMENT = 1  # не удалось произвести вычисления, с агрументом что-то не так
SERVER_TIMEOUT = 2  # не удалось произвести вычисления, сервер слишком долго работал и сбросил задачу

Таймаут установлен на сервере, равен 30 секундам. Все числа по сети передаются как числа с плавающей точкой, преобразование осуществляется на сервере. Если преобразование не удалось или на вход был подан неверный аргумент (например, отрицательные числа для факториала и квадратного корня, не целое число для факториала), то в ответе будет передан код результата 1 - неверный аргумент.

@wrbbz
Copy link
Contributor

wrbbz commented Apr 20, 2021

  • Почему в 400х ошибках тело ответа аналогично телу 200х?
  • Ну и еще там код ошибки (в теле) - 0
  • В идеале бы, чуть увеличить имеющееся описание. Два эндпоинта - маловато

@Mr-Shpinks
Copy link
Author

Если я вас правильно понял, то первые два замечания поправил. Насчёт третьего не уверен, что можно сделать. В PR есть описание задания и протокола - по сути, там всего два типа операции - быстрая и долгая. В связи с этим я и сделал два эндпоинта. Какие ещё можно сделать? Хотя бы в какую сторону думать?

@wrbbz
Copy link
Contributor

wrbbz commented Apr 21, 2021

Добавь еще GET, например, который в качестве ответа будет выдавать код запрашиваемой операции (или всех возможных)

@Mr-Shpinks
Copy link
Author

Mr-Shpinks commented Apr 21, 2021

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants