Game Chat - Asynchronous Client-Server Chat
Высокопроизводительный клиент-серверный чат с асинхронным вводом-выводом на epoll.
Описание:
Распределенный чат для игрового лобби с поддержкой множества одновременных подключений и рассылкой сообщений всем клиентам.
Технологии:
Язык: C (C99)
API: POSIX Sockets, epoll (Edge-Triggered)
Модель: Non-blocking I/O
Возможности:
Множество одновременных клиентов
Асинхронная обработка на epoll (EPOLLET)
Буферизация ввода-вывода
Корректная обработка partial send/recv
Поддержка имен клиентов
Серверные сообщения (broadcast)
Обрезка пробельных символов
Игнорирование пустых сообщений
Быстрый старт
Сборка:
make
Запуск сервера:
./server 12345
Запуск клиента:
./client localhost:12345 username
Архитектура:
Сервер:
epoll: Edge-Triggered режим для масштабируемости
Peer Management: Массив активных подключений
Broadcast: Рассылка сообщений всем клиентам
Buffering: Выходные буферы для каждого клиента
Клиент:
poll: Ожидание событий на сокете и stdin
Message Parsing: Разбор сообщений по \n
Auto-send name: Отправка имени при подключении
Протокол:
Сообщения разделяются символом \n. Формат с именами: username: message text
Особенности:
Отсутствие глобальных переменных
Корректная работа с EPOLLET (чтение до EAGAIN)
Проактивная отправка данных (обход ловушки EPOLLET)
Обработка отключений клиентов
Отсутствие утечек памяти
Тесты включают:
Базовые тесты подключения
Тесты больших сообщений (1MB+)
Мульти-клиент тесты (20+ клиентов)
Стресс-тесты (1000+ сообщений)
Тесты корректности данных