Как клиенты VNC знают, когда запрашивать обновления экрана? - PullRequest
0 голосов
/ 15 ноября 2018

Я разрабатываю VNC-совместимый сервер, следуя спецификации RFC 6143 и использую UltraVNC в качестве клиента.

Я заметил, что, хотя иногда все работает довольно хорошо, большинство израз UltraVNC не отправляет сообщения FramebufferUpdateRequest.В результате мой сервер не отправляет FramebufferUpdate и экран завис.При нажатии кнопки «Обновить» на панели инструментов UltraVNC происходит обычное обновление экрана.

Я провел несколько тестов и обнаружил, что при возникновении этой проблемы UltraVNC ничего не отправляет на мой сервер, иТрафик TCP остается пустым (сокет не закрыт), если пользователь не вводит данные (мышь / клавиатура) или пользователь нажимает кнопку «Обновить».

Я думал об отправке FramebufferUpdate независимо от того, запросил ли клиентэто или нет, как только я обнаружил изменения экрана (или после ввода данных пользователем).Это работало хорошо, и у меня была трансляция экрана в реальном времени, однако похоже, что UltraVNC больше не мог обрабатывать пользовательские вводы (клавиатура и мышь), поскольку трафик был забит FramebufferUpdates.Кроме того, похоже, что это идет вразрез со спецификациями, поскольку в нем говорится, что FramebufferUpdates можно отправлять только в ответ на один или несколько FramebufferUpdateRequests (в VNC серверы отправляют только кадровые буферы по запросу клиентов).

Итак, мои вопросыявляются: как мне сообщить клиенту VNC, что какой-то регион экрана был обновлен, «предложив» ему отправить FramebufferUpdateRequest, если это возможно?Кроме того, что UltraVNC принимает во внимание для отправки FramebufferUpdateRequest?Это не похоже на то, что оно основано на интервале и не основано на пользовательском вводе ...

...