Страница 1 из 1

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

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

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

СообщениеДобавлено: 21.08.2013 19:51:33
VirtUX
arra писал(а):Это будет грузить проц по-чёрному

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

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

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

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

СообщениеДобавлено: 22.08.2013 10:40:40
debi12345
Любой сервер на самом деле - поллер по шедуллеру. Вся эмуляция событий тоже делается через 1) проверку признака события (Вашего "файла") по шедуллеру или 2) коннента к серверу который по шедуллеру ожидает коннектов :)

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

СообщениеДобавлено: 22.08.2013 11:18:34
VirtUX
arra писал(а):И программа именно что ждет, а не гоняет пустой цикл.

Во время любого ожидания гоняется цикл. И Вам решать кто этим циклом управляет: Вы или чей-то чужой код.