Pergunta

Como parte de uma ferramenta de apoio ao cliente, eu estou querendo fornecer alguma funcionalidade para ser capaz de pedir para ver / controlar remotamente uma sessão de desktop. Há um monte de maneiras de obter uma captura de tela e, em seguida, transmiti-lo, mas eu estou querendo saber, em particular, por que a RDP (Remote Desktop / Terminal Services vs. experiência VNC é tão diferente. Eu estou usando RDP vs . VNC só porque eles parecem usar métodos drasticamente diferentes para transmitir a tela para o cliente.

Se eu tivesse que adivinhar, RDP parece blocos de transmissão de gráficos bitmap (dizem 100x100px), a fim de construir a imagem completa (que pode ser bastante lento), mas parece transferir normais formas pintadas / preenchimentos, ou desenho da fonte para o cliente de forma extremamente rápida. VNC parece tirar fotos gigantes de tela, comparar uma imagem anterior e transmitir as alterações para o cliente.

Eu sinto que RDP é muito mais alta qualidade e suave protocolo que qualquer outra coisa lá fora, então qual técnica que ele usa para fazer isso?

EDIT-Só para esclarecer, eu estou perguntando sobre essas técnicas gráficas especificamente como um método de programação protocolo de streaming - não para que produto / tecnologia existente para utilizar para resolver este requisito de negócios

.
Foi útil?

Solução

Como você descobriu, ambos são muito diferentes na maneira de transmitir a mudança. O protocolo RDP de MS e extensão é de um padrão ITU ( T.128) que podem ser comprados on-line.

implementa o RDP muita largura de banda de economia de técnicas que se complementam-outros e torná-lo muito eficiente sobre baixa largura de banda.

VNC, por outro lado tem técnicas de compressão muito básicas: ele irá enviar blocos de bitmap que mudaram e vai usar tipos básicos de compressão, de RLE para jpeg para transmitir os blocos de forma eficiente
. Infelizmente, ainda é bastante dispendioso sobre baixa largura de banda.

VNC basicamente não tem conhecimento dos primitivos gráficos subjacentes utilizados para construir a tela. Isso faz com que seja fácil de usar em qualquer máquina, porque ele só monitora mudanças para o bitmap tela.
RDP sobre os outros ganchos mão mais profundas para o API do Windows e é capaz de otimizar o seu fluxo com base na quantidade mínima de informações necessárias para gerar a mesma actualização no cliente.

Se você quiser integrar funcionalidades de desktop remoto, você tem um par de opções:

  • para RDP você pode usar o ActiveX usado para funcionalidades remotas da web. Você pode querer ter um olhar para um invólucro para integrá-lo em seu próprio software.
    Se você quiser se aprofundar isso, há código fonte disponível para o cliente linux rdesktop que faz conexão para máquinas Windows através RDP.

  • para VNC, há uma série de implementações de código aberto.
    Co-piloto de FogCreek realmente usa um e você pode obter a sua fonte como ele é construído em TightVNC

Há também uma série de projetos em CodeProject sobre RDP VNC .

Outras dicas

Como Renaud disse, VNC simplesmente envia mais de bitmap muda bloco por bloco, sem qualquer conhecimento do que o conteúdo é. RDP é muito mais inteligente.

Você pode verificar exatamente o RDP faz destas duas especificações:

nível

Protocolo: http://msdn.microsoft.com/en-us /library/cc240445(PROT.10).aspx

nível

Gráficos: http://msdn.microsoft.com/en-us /library/cc241537(PROT.10).aspx

Eu acho maiores ganhos da RDP vir de:

  • Cache: O cliente pode armazenar uma grande quantidade de blocos previamente visto e o servidor pode dizer ao cliente como usá-los. Também estes são persistentes por isso, quando um cliente se conecta a um servidor que já foi a ele pode anunciar o que bloqueia ele tem no disco. Muito útil quando as janelas são movidos. Também muitas partes do Windows, como a barra de título são os mesmos.

  • Line / desenho de bloco. Como você adivinhou RDP tem operações de linha, poli e desenho rect. Com janelas de desenho estes vêm em uso bastante.

  • desenho Font. RDP tem uma maneira de enviar mais gylphs para fontes e dizer ao cliente para torná-los.

  • renderização Cursor. Os ícones do cursor são enviadas como glifos. VNC simplesmente usa um ponto

Essas são as grandes que vêm à mente. Confira a seção 2.2.7 conjuntos de recursos da especificação de protocolo para a lista completa de desenho recursos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top