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

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

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

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

5 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам