Обмен сообщениями клиента и сервера по tcp

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Обмен сообщениями клиента и сервера по tcp

Сообщение arra » 21.08.2013 16:45:44

Добрый день.
Пишу небольшую пошаговую игру. Нужно сделать вариант с игрой по сети, желательно p2p, чтобы один из участников брал на себя роль сервера. Предполагаю использовать tcp, но если есть что-то более подходящее, подскажите.
Возникает 2 вопроса:
1. Как непосредственно посылать сообщения от клиента к серверу и наоборот? В идеале, в виде команд с параметрами, но можно и просто массив байт, там очень немного инфы будет передаваться.
2. Главное, чего я не понимаю, как организовать ожидание! То есть, когда ходит один игрок, остальные ничего не делают, ждут информационных сообщений от сервера о действиях активного игрока. Не гонять же бесконечный цикл с функцией, которая будет постоянно проверять наличие сообщений от сервера. Это будет грузить проц по-чёрному.
arra
новенький
 
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Re: Обмен сообщениями клиента и сервера по tcp

Сообщение VirtUX » 21.08.2013 19:51:33

arra писал(а):Это будет грузить проц по-чёрному

На форуме достаточно инфы про клиент-серверные решения... Лично сам здесь постигал основы с помощью поиска по форуму.
Чтоб не грузить "проц" используйте в цикле потока ожидания запросов sleep(1); Нагрузка на ЦП станет равной приблизительно 0% ;)
Sleep(1); гарантированно поставит Ваш поток в очередь на получение нового кванта процессорного времени до истечения уже полученного. И Вы минимум 1 миллисекунду дадите ему отдохнуть от Ваших задач. Т.о. Вы не заставите ОС грузить "проц". Более детально - ковыряйте маны на тему "многозадачность"/"мультипоточность"
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Обмен сообщениями клиента и сервера по tcp

Сообщение arra » 22.08.2013 07:47:31

Про sleep я в курсе. Но, возможно, есть более кошерные решения? Например, если нам надо ждать, когда в определенной папке появится файл, есть специальная функция, которая создает "объект для ожидания". И программа именно что ждет, а не гоняет пустой цикл. А когда файл находится, управление передается коду, следующему за вызовом функции. При работе с tcp есть что-нибудь подобное?
arra
новенький
 
Сообщения: 27
Зарегистрирован: 30.03.2013 22:58:27

Re: Обмен сообщениями клиента и сервера по tcp

Сообщение debi12345 » 22.08.2013 10:40:40

Любой сервер на самом деле - поллер по шедуллеру. Вся эмуляция событий тоже делается через 1) проверку признака события (Вашего "файла") по шедуллеру или 2) коннента к серверу который по шедуллеру ожидает коннектов :)
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5759
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: Обмен сообщениями клиента и сервера по tcp

Сообщение VirtUX » 22.08.2013 11:18:34

arra писал(а):И программа именно что ждет, а не гоняет пустой цикл.

Во время любого ожидания гоняется цикл. И Вам решать кто этим циклом управляет: Вы или чей-то чужой код.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16

Рейтинг@Mail.ru