diferença entre a programação de socket e a programação Http


Respostas:


109

HTTP é um protocolo de aplicativo. Basicamente, significa que o próprio HTTP não pode ser usado para transportar informações de / para um ponto de extremidade remoto. Em vez disso, ele depende de um protocolo subjacente que, no caso do HTTP, é o TCP.

insira a descrição da imagem aqui

Você pode ler mais sobre camadas OSI se estiver interessado.

Os soquetes, por outro lado, são uma API fornecida pela maioria dos sistemas operacionais para comunicar-se com a rede. A API de soquete suporta diferentes protocolos da camada de transporte e abaixo.

Isso significa que se você quiser usar TCP, use sockets. Mas você também pode usar soquetes para se comunicar usando HTTP, mas então você tem que decodificar / codificar mensagens de acordo com a especificação HTTP ( RFC2616 ). Visto que isso pode ser uma tarefa enorme para a maioria dos desenvolvedores, também temos clientes prontos em nossos frameworks de desenvolvedor (como .NET), por exemplo, o WebClientou as HttpWebRequestclasses.


2
Portanto, ambos usam TCP, o que acontece é que o HTTP responde em um formato predefinido e o soquete fornece os dados retornados de outra extremidade de um soquete, certo?
आनंद

4
Sim. O TCP garante que tudo chegue (camada de transporte) e o HTTP informa o que os aplicativos da web devem fazer.
jgauffin de

25

Com o HTTP, você usa o protocolo HTTP de alto nível (que funciona em cima de um soquete). É sem sessão, o que significa que você envia uma solicitação de texto como GET google.come recebe texto ou dados binários em troca, depois que a conexão for fechada (em HTTP 1.1 conexões persistentes estão disponíveis)

Exemplo do MSDN:

public static void Main (string[] args)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create (args[0]);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse ();

    Console.WriteLine ("Content length is {0}", response.ContentLength);
    Console.WriteLine ("Content type is {0}", response.ContentType);

    // Get the stream associated with the response.
    Stream receiveStream = response.GetResponseStream ();

    // Pipes the stream to a higher level stream reader with the required encoding format. 
    StreamReader readStream = new StreamReader (receiveStream, Encoding.UTF8);

    Console.WriteLine ("Response stream received.");
    Console.WriteLine (readStream.ReadToEnd ());
    response.Close ();
    readStream.Close ();
} 

Com os soquetes você vai para o nível mais baixo e controla a conexão e envia / recebe bytes brutos.

Exemplo:

var remoteEndpoint=new IPEndPoint(IPAddress.Loopback, 2345);
var socket = new Socket(remoteEndpoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(remoteEndpoint);
socket.Send(new byte[] {1, 2, 3, 4});

A conexão não é fechada a partir de HTTP 1.1.
Marquês de Lorne

@EJP: depende de como o Connectioncabeçalho está definido;)
jgauffin

@jgauffin Exatamente. Não está fechado à toa.
Marquês de Lorne

Verdade, mas esses são os detalhes que o OP descobrirá por si mesmo, junto com outras informações de 95% sobre este tópico.
Anri

13

Conexão HTTP

  • A conexão HTTP é um protocolo executado em um soquete.
  • A conexão HTTP é uma abstração de nível superior de uma conexão de rede.
  • Com a conexão HTTP, a implementação cuida de todos esses detalhes de nível superior e simplesmente envia uma solicitação HTTP (algumas informações de cabeçalho) e recebe uma resposta HTTP do servidor.

Conexão de soquete

  • Socket é usado para transportar dados entre sistemas. Ele simplesmente conecta dois sistemas, um endereço IP é o endereço da máquina em uma rede baseada em IP.
  • Com a conexão de soquete, você pode projetar seu próprio protocolo para conexão de rede entre dois sistemas.
  • Com a conexão Socket, você precisa cuidar de todos os detalhes de nível inferior de uma conexão TCP / IP.

1

A programação HTTP ou solicitação HTTP é usada para acoplamento frouxo e comunicação de tecnologia de linguagem neutra de plataforma, onde a programação de soquete é usada onde o sistema tem protocolo de especificação de linguagem


1
O que você quer dizer com linguagem? Um aplicativo Java pode se comunicar com um aplicativo Python via sockets, por exemplo
Adam Hughes

Acho que o que ele quis dizer é que, geralmente, se você deseja conectar sistemas fracamente acoplados (ou totalmente diferentes), o HTTP é útil: um front-end construído com alguma tecnologia com uma construção apoiada com outra tecnologia, acessando recursos na web através de URLs. Ao passo que, normalmente, se você estiver usando protocolos de conexão de nível inferior como TCP / UDP, provavelmente estará orquestrando uma comunicação com sistemas com tecnologias semelhantes (por exemplo, diferentes aplicativos Java). Isto está certo? Estou tentando entender por mim mesmo.
Nicola Amadio

0

para que dois terminais possam se comunicar, eles devem seguir um conjunto de regras. no computador, esse conjunto de regras é denominado protocolo.

por exemplo, para um endpoint como um navegador e para outro como um servidor web, ambos devem seguir um conjunto de regras ou protocolo denominado http para poder se comunicar e trocar informações. então, na rede mundial de computadores e neste tipo de comunicação, apenas aqueles que falam com base neste protocolo http podem se comunicar com sucesso.

socket é apenas um endpoint. ele poderia seguir o protocolo http para entrar em uma comunicação em www como um cliente solicitando uma página ou poderia atuar como um servidor ouvindo conexões. ou talvez pudesse seguir outro conjunto de regras ou protocolos como ssh, ftp e se comunicar de outras maneiras.

agora na programação de soquete você pode fazer um soquete, vinculá-lo a um endereço ip e um número de porta para atuar como um número de porta e dizer a ele para seguir http, ssh, ftp ou o que você quiser com base nas comunicações que deseja usar soquete para.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.