Как формализовать и валидировать запросы по WebSocket?

Использую ASP .NET Core. + WebSocket.
Проблема вот в чем: У меня есть ряд функций в классе, которые представляют собой интерфейс взаимодействия клиента (js) <----> сервера (.net) .
Например методы такие:
DateTime GetCurrentDate();
IEnumerable<Message> GetMessages(int count);
и т.д

Соответственно клиент с js должен вызвать метод GetMessages на сервере и получить обратно список сообщений в json.
В js есть ведь метод socket.send("просто строка") и Сервер получает обычную строку, так вот как это красиво обработать, чтобы сервер понял, что клиент хочет вызвать именно метод GetMessage еще и аргументы какие-то передать, если они нужны?
Можно отправить socket.send("1/parameter) , где 1 - это id enum элемента на сервере и через switch case смотреть какой метод нужно дернуть и какой параметр передать, но это выглядит коряво и наверняка есть другой способ.
  • Вопрос задан
  • 179 просмотров
Решения вопроса 2
@rPman
Это называется Remote Procedure Call
Тебе нужно определить какой то формат сообщений, либо взять готовый (гуглить: asp.net websocket rpc) либо придумать его самому

Формально это очень просто - нужно понимать что общение по вебсокет это асинхронные сообщения (но да бывает что сервер этого не умеет но это нонсенс) а значит в каждом сообщении должнен быть идентификатор, чтобы можно было связать ответ с запросом (он будет возвращен с ответом)

у сообщений должен быть четкий конец, например символ новой строки а общение текстовое, формат сериализации данных - json (у json большие накладные расходы на сетевой трафик, но если сервер и клиент умеют сжимать websocket то это уже не так заметно), по хардкору можно пользоваться бинарной сериализацией, в этом случае настоятельно рекомендую protobuf
Ответ написан
Комментировать
yarosroman
@yarosroman
C# the best
А чем простой RestApi не угодил? GRPC, SignalR? все придумано до нас.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы