LINUX.ORG.RU

Игра через ssh отображается «рывками»


0

1

Мой терминальный «Pac-Man» почему-то over ssh отображает игру «рывками».
Как убрать этот эффект (или - минимизировать его)?
Может как-то можно flush() терминала делать?

P.S. Пока идея одна - писать длинную случайную строку символов в неиспользуемое место экрана (завершая «пробелом»), чтобы ssh-сервер сам сбросил буфер клиенту. То есть - искуственно дополнить буфер до «критического» размера.

★★★★★
Ответ на: комментарий от devl547

> сжатие?

Я не в курсе конфигурации на стороне сервера - наверное, со сжатием, как обычно.
Единственное, что пока знаю, это про ОС - CentOS 4.4.
Если это надо - могу попытаться достать /etc/sshd_config

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify
$ ssh -oNoDelay=yes xml@66.xxx.xx.xxx
command-line: line 0: Bad configuration option: NoDelay
pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

Кстати, эту опцию надо включать при компиляции
http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch05_04.htm

NoDelay disables the Nagle Algorithm by toggling the TCP_NODELAY
bit when requesting a TCP connection from the Unix kernel. Legal values
are yes (to disable) and no (to enable; the default).

In order to work, this feature must be enabled at compile time using --
enable-tcp-nodelay. [Section 4.1.5.3, "TCP/IP support"] Note also that
NoDelay can be enabled or disabled by the SSH2 client, rather than
serverwide, using the client configuration keyword NoDelay. [Section
7.4.4.4, "Controlling TCP_NODELAY"]

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

По-дефолту используется Nagle Algorithm. Фактически - это заполнение буфера пакетами и последующая отправка, из-за чего все дергается.
Если его отключить - то пакеты от ssh уходят сразу, как и требуется.
Такая вот фича протокола.

devl547 ★★★★★
()
Ответ на: комментарий от devl547

Nagle Algorithm. Фактически - это заполнение буфера пакетами и последующая отправка, из-за чего все дергается


Nagle Algorithm кроме того предполагает ещё и ожидание Acknowledge на отосланный пакет данных, только после этого передается новый. Предусмотрен для уменьшения трафика в сети. Но для таких приложений Nagel - зло :)

velikS
()

короче придется свою сборку клиента выкладывать как я понимаю :(

trashymichael ★★★
()

> P.S. Пока идея одна - писать длинную случайную строку символов

в неиспользуемое место экрана


Попробовал дописывать 10 тыс символов, завершая их пробелом (чтобы
ничего не было видно), в пустом месте экрана.

По отзывам пользователей - стало получше, но все-равно - игроки
двигаются только тогда, когда нажимаешь какую-нибудь кнопку (ncurses,
wgetch()). Попробовал - действительно, привидения и игрок стоят на месте,
пока не нажмешь на any key, нажимаешь - сразу (одним «рывком») перебегают в нужное место.

pacify ★★★★★
() автор топика
Ответ на: комментарий от elverion

> Странно, я только что проверил свою «змейку» на python с ncurses

Покажешь исходники? Может я что-то не так делаю?

К сожалению, мой заказчик попросил исходники Pac-Man'а не выкладывать -
у них это дело переходит в собственность университета автоматически,
могут быть проблемы.

pacify ★★★★★
() автор топика

> «Pac-Man»

over ssh

Линукс-админы такие суровые.

anonymous
()
Ответ на: комментарий от elverion

> Управление стрелками. У меня через ssh работает без проблем.

У тебя регулярно делается wrefresh().
Я пробовал делать это, но у меня программа улетала в core dump.
К счастью, после добавления «забивки» терминала random-цепочкой (см. соседний топик http://www.linux.org.ru/forum/development/6224695 ) wresfresh() стал проходить нормально. Сейчас протестируем это решение по ssh - и отпишу результат.

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

wrefresh() надо делать после небольшого usleep() (в каждой нити, у меня - Пак-манов и привидений)

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.