Клиент-сервер в HL и CS, Newbie Настройка сетевых переменных |
|
.: Просмотров: 4957 :: :: :. |
" Перевод: Newbie |
Различными параметрами сетевой настройки управляют четыре команды:
cl_cmdrate - количество раз в секунду, которые клиент сообщает о своих действиях серверу. Помните, что объем данных, передаваемых за одно обновление зависит от происходящего вокруг.
cl_updaterate - количество раз в секунду, которые сервер сообщает о происходящем на карте клиенту. Точно также, чем больше событий происходит, тем больше объем данных за одно обновление.
cl_rate - устанавливает ограничение количества байт в секунду, которые клиент может послать серверу. Это значение необходимо, так как сервер не может точно вычислить возможности соединения клиента. Значение должно совпадать со скоростью исходящей передачи вашего соединения.
rate - устанавливает лимит байт в секунду, которые сервер может передать клиенту. Со стороны сервера это значение можно ограничить с помощью команды sv_maxrate.
Обновления от клиента к серверу обычно содержат очень мало данных - примерно 20 байт.
Обновления от сервера к клиенту сравнительно велики - от 30 байт на тихих участках картыдо 175 байт в бою.
Для примера, модем 56k имеет максимальную исходящую ширину канала 33.6k, и входящую - 56k. Эти значения - бит в секунду (то есть 33600 бит в секунду). Однако это - общее значение, а не количество данных, то есть часть из этого используется на собственно поддержание соединения и сигнализацию (примерно 10 процентов) и только часть может содержать реальные данные. В результате соединение на 33.6k в реальности может передавать реальные данные только со скоростью 30.2k, что составляет 3780 байт (для тех кто не знает - в одном байте - 8 бит) - и это как раз значение, которому должен равняться параметр cl_rate (подразумевается идеальное соединение - если модемная линия низкого качества, скорость соответственно падает).
Соответственно, идеально соединение на 56k дает нам 56000 бит в секунду. Уменьшаем на 10процентов и получаем 6300 байт в секунду. Это и есть нужное на значение rate.
rate равняется скорости скачивания умноженной на 0.9 и разделенной на 8 cl_rate равняется скорости закачки умноженной на 0.9 и разделенной на 8 |
Учитывая что клиентам особо нечего сообщать серверу, в общении клиент -> сервер оченьредко возникают проблемы даже на модемах.
Отметим, что объем служебной информации различается в зависимости от типа соединения, ноэто не имеет особого значения для скоростных соединений, т.к. клиент обычно имеет большуюширину канала, чем сервер позволит ему использовать.
Дробные значения cl_rate и rate не оказывают никакого влияния и миф о том, что они улучшаю, что либо - не более чем миф.
Как упомянуто выше, обновления от клиента к серверу обычно очень малы и находятся где то в районе 20 байт. На 56k модеме с идеальной линией доступны 3780 байт в секунду, так что cl_cmdrate может быть установлен в 189. В Half-life существует ограничение на значение cl_cmdrate равное 60.
Обновления от сервера к клиенту содержат больше данных. Большие обновления (например вовремя боя) могут достигать 175 байт. Имея 6300 байт в секунду на идеальном 56k соединениимы можем выставить cl_updaterate равным 36.
cl_updaterate равняется значению rate деленному на 175 cl_cmdrate равняется значению cl_rate деленному на 20 |
У игроков со скоростными соединениями значения будут отличаться. Во-первых потому, что скоростное соединение обычно дает большую полосу, чем сервер позволит использовать. Соответственно значения rate и cl_rate необходимо выставлять на максимум, чтобы использовать весь доступный канал.
Максимальное значение для rate и cl_rate равняется 20,000.
Вычисление правильных значений cl_cmdrate и cl_updaterate обычно зависит от конкретного сервера, потому что значение sv_maxrate ограничивает доступную ширину канала, и соответственно влияет на число обновлений.
Как указано выше, в Half-life существует ограничение значение cl_cmdrate и cl_updaterate равное 60, однако рекомендуемое максимальное значение - 75 (больше - не меньше, верно?), которое можно уменьшать для соответствия sv_maxrate.
Команда net_graph отображает информацию о состоянии соединения между сервером и клиентом.
Интересующее нас значение - "удушье" (choke).
Choke отображает количество обновлений, которые не удалось послать по причиненедостаточной ширины канала.
Значение Потеря (Loss) - другое, редко используемое значение, которое отражает количествообновлений, которые были посланы, но не были приняты. Если игрок испытывает значительныепотери, то проблема скорее техническая и относится к самому соединению, а значит выходитза рамки этой статьи.
Запустите net_graph и следите за значением choke. Когда эффект "удушья" возникает - немного уменьшайте значения cl_updaterate и cl_cmdrate до тех пор, пока во время боя "удушье" не прекратит возникать вообще.
Основная цель - иметь максимально возможные значения cl_updaterate и cl_cmdrate, сохраняя при этом полное отсутствие "удушья".