Лабораторная работа 6. Сетевое программирование

       Напишите программу, реализующую заданный сетевой сервис. Она должна уметь одновременно обслуживать большое количество клиентов. Запрограммируйте два варианта сервера из списка: один - TCP-сервер, другой - веб-сокет сервер (пары технологий у всех в группе должны быть разными; спросите преподавателя, не занята ли выбранная вами пара):
  1. C++ threads с блокирующими сокетами (пример)
  2. C++ poll с мультиплексированным вводом-выводом (пример)
  3. C++ epoll (extended poll) со сложностью алгоритма O(1) (пример)
  4. C++ ASIO - с асинхронным вводом-выводом, использует Boost (пример)
  5. C# с неблокирующими сокетами (пример (сильно загружает процессор - нужно исправить))
  6. Ruby (пример TCP-сервера;       пример веб-сокет сервера)
  7. Python (пример TCP-сервера;       пример веб-сокет сервера )
  8. Java Netty (пример TCP-сервера)
  9. Javascript Node.js (пример TCP-сервера;      пример веб-сокет сервера)
  10. Php (пример TCP-сервера;      пример веб-сокет сервера)
  11. Golang (пример TCP-сервера на основе threads, пример TCP-сервера на основе events (epoll), пример веб-сокет сервера на основе threads)
  12. Rust (пример TCP-сервера на основе threads)
  13. Haskell (пример TCP сервера,       пример веб-сокет сервера)
  14. Kotlin (пример TCP сервера;      пример веб-сокет сервера)
  15. Scala (пример TCP сервера)
  16. Другую, без примера (но одну) для протокола CALC из лекции или вебсокет-сервер на языке программирования, для которого отсутствует пример
        Указанные технологии нужно применять только при написании программы-сервера. В качестве программы-клиента используйте telnet для случая TCP-сервера и эту веб-страничку для случая вебсокет-сервера.
        Во всех заданиях клиенты подключаются к серверу, общаются продолжительное время: посылают запросы, получают ответы и отключаются. Реализуйте возможность конвейеризации запросов: отправки клиентом еще одного или нескольких запросов до получения ответа на предыдущий.

        Придумайте и опишите формат пересылаемых клиентами сообщений и ответов сервера на эти сообщения (т.е. протокол).

        Ваш вариант задания async_service.txt находится в вашей папке на сервере stud.mmcs.sfedu.ru.

Протестируйте ваши программы на большой нагрузке и запишите в отчет статистику: сколько максимально запросов в секунду смог обработать ваш сервис (3 бонусных балла). Программа-клиент должна быть максимально простой и быстрой (C++) для тестирования сервера под большой нагрузкой  (скачать пример клиента).

Сделанное задание нужно показать преподавателю на занятии и после этого загрузить решение в Moodle.