Skip to content

Latest commit

 

History

4 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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+ сообщений)
Тесты корректности данных

About

Высокопроизводительный клиент-серверный чат с асинхронным вводом-выводом на epoll

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages