Как работает RealVNC? - PullRequest
       3

Как работает RealVNC?

3 голосов
/ 29 января 2011

Я хотел бы знать, как работает RealVNC Remote Viewer.

Часто ли он отправляет скриншоты клиенту в режиме реального времени?

или он использует другой подход?

Ответы [ 5 ]

8 голосов
/ 29 января 2011

В качестве обзора очень высокого уровня существует два типа серверов VNC:

  1. Съем экрана.Эти серверы будут записывать текущее отображение в буфер, сравнивать его с состоянием клиента и отправлять только прямоугольники, отличающиеся , на клиент.Подключившись к процессу обновления дисплея, эти серверы будут проинформированы об изменении экрана диспетчером дисплея или ОС.Затем они могут использовать эту информацию для отправки клиенту только измененных прямоугольников.

В обоих случаях это фактически поток обновлений экрана;однако, только измененные области экрана передаются клиенту.В зависимости от используемой версии протокола VNC эти обновления также могут быть сжаты.

(Обратите внимание, что клиент может запросить полное обновление экрана в любое время, когда этого пожелает, но сервер выполнит только это.это само по себе, если весь экран изменяется.)

Кроме того, обновления экрана не единственные передаваемые вещи.Существуют отдельные каналы, которые сервер может использовать для отправки обновлений буфера обмена и обновлений положения мыши (поскольку физически пользователь на удаленном компьютере может также перемещать мышь).

5 голосов
/ 29 января 2011

Сторона протокола является основанный на одной графике примитив: «поставить прямоугольник пикселя данные в заданной позиции x, y ». В На первый взгляд это может показаться неэффективный способ рисования многих пользователей компоненты интерфейса. Тем не мение, позволяя различные кодировки для данных пикселей дает нам большой степень гибкости в том, как торговать от различных параметров, таких как сеть пропускная способность, скорость рисования клиента и скорость обработки на сервере. Последовательность эти прямоугольники образуют кадровый буфер обновить (или просто обновить). Обновление представляет собой изменение от одного действительного состояние кадрового буфера в другом, так что в некоторые способы похожи на кадр видео. Прямоугольники в обновлении обычно не пересекаются, но это не обязательно дело.

Прочитайте здесь , чтобы узнать больше, как это работает

4 голосов
/ 29 января 2011

Да. Он просто посылает какие-то скриншоты (сжатые, в которых повторно используются неизмененные части предыдущего скриншота).

Это, кстати, протокол VNC, любой клиент работает таким образом (хотя реальный способ сжатия изображений и т. Д. И т. Д. Может измениться).

2 голосов
/ 29 января 2011

По сути, сервер отправляет обновления кадрового буфера клиенту, а клиент отправляет на сервер запросы на ввод клавиатуры и мыши и запросы обновления буфера кадров.

Сообщения обновления буфера кадров могут иметь разные кодировки, но по сути ониразличные способы представления квадратных площадей данных пикселей.Обычно клиент запрашивает обновления кадрового буфера для всего экрана, но может запрашивать только область экрана (например, клиенты небольшого экрана, отображающие область просмотра экрана серверов).Затем сервер отправляет FBU (обновление буфера кадра), который содержит прямоугольники, где экран изменился с момента отправки последнего FBU клиенту.

Лучшая ссылка для протокола RFB / VNC - здесь .IETF имеет недавний (2011 г.) документ по стандартам RFC 6143 , который охватывает RFB, хотя он не является обширным справочным руководством.

1 голос
/ 29 января 2011

По сути работает, отправляя скриншоты на лету. («Реальное время» здесь является неправильным в том смысле, что здесь нет четкого крайнего срока.) Он пытается оптимизировать, отправляя только измененные области экрана, и некоторые вилки строки кода VNC используют драйвер зеркала для получения уведомление о записи областей отображения, в то время как другие используют перехватчики сообщений окна для обнаружения запросов на перерисовку.

...