perbedaan antara pemrograman soket dan pemrograman Http


Jawaban:


109

HTTP adalah protokol aplikasi. Ini pada dasarnya berarti bahwa HTTP itu sendiri tidak dapat digunakan untuk mengangkut informasi ke / dari titik akhir jarak jauh. Sebaliknya itu bergantung pada protokol yang mendasari yang dalam kasus HTTP adalah TCP.

masukkan deskripsi gambar di sini

Anda dapat membaca lebih lanjut tentang lapisan OSI jika Anda tertarik.

Soket di sisi lain adalah API yang disediakan oleh sebagian besar sistem operasi untuk dapat berkomunikasi dengan jaringan. API soket mendukung berbagai protokol dari lapisan transport dan ke bawah.

Itu berarti jika Anda ingin menggunakan TCP, Anda menggunakan soket. Tetapi Anda juga dapat menggunakan soket untuk berkomunikasi menggunakan HTTP, tetapi kemudian Anda harus mendekode / menyandikan pesan sesuai dengan spesifikasi HTTP ( RFC2616 ). Karena itu bisa menjadi tugas besar bagi sebagian besar pengembang, kami juga menyiapkan klien dalam kerangka kerja pengembang kami (seperti .NET), misalnya kelas WebClientatau HttpWebRequest.


2
Jadi keduanya menggunakan TCP, hanya saja HTTP merespons dalam format yang telah ditentukan dan soket memberikan data yang dikembalikan dari ujung soket lain, bukan?
आनंद

4
ya. TCP memastikan bahwa semuanya tiba (lapisan transport) dan HTTP memberi tahu apa yang harus dilakukan aplikasi web.
jgauffin

25

Dengan HTTP Anda menggunakan protokol HTTP tingkat tinggi (yang bekerja di atas soket). Ini tanpa sesi yang berarti Anda mengirim permintaan teks seperti GET google.comdan menerima teks atau data biner sebagai imbalan, setelah koneksi itu ditutup (dalam HTTP 1.1 koneksi persisten tersedia)

Contoh 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 ();
} 

Dengan soket Anda pergi ke level yang lebih rendah dan benar-benar mengontrol koneksi dan mengirim / menerima byte mentah.

Contoh:

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});

Koneksi tidak ditutup dari HTTP 1.1.
Marquis dari Lorne

@EJP: tergantung pada bagaimana Connectiontajuk diatur;)
jgauffin

@jgain Persis. Itu tidak ditutup mau tak mau.
Marquis dari Lorne

Benar, tapi itulah detail OP akan menemukan dirinya bersama dengan 95% informasi lainnya tentang topik ini.
Anri

13

Koneksi HTTP

  • Koneksi HTTP adalah protokol yang berjalan pada soket.
  • Koneksi HTTP adalah abstraksi tingkat tinggi dari koneksi jaringan.
  • Dengan koneksi HTTP, implementasi menangani semua detail tingkat yang lebih tinggi ini dan cukup mengirim permintaan HTTP (beberapa informasi header) dan menerima respons HTTP dari server.

Koneksi Soket

  • Socket digunakan untuk mengangkut data antar sistem. Ini hanya menghubungkan dua sistem bersama-sama, alamat IP adalah alamat mesin melalui jaringan berbasis IP.
  • Dengan koneksi soket Anda dapat merancang protokol Anda sendiri untuk koneksi jaringan antara dua sistem.
  • Dengan koneksi Socket Anda perlu mengurus semua detil level yang lebih rendah dari koneksi TCP / IP.

1

Pemrograman HTTP atau permintaan HTTP digunakan untuk kopling longgar dan komunikasi teknologi bahasa netral platform sedangkan pemrograman soket digunakan di mana sistem memiliki protokol spesifikasi bahasa


1
Apa yang kamu maksud dengan bahasa Aplikasi java dapat berkomunikasi dengan aplikasi Python melalui soket misalnya
Adam Hughes

Saya pikir maksudnya adalah, biasanya, jika Anda ingin menghubungkan sistem yang digabungkan secara longgar (atau sama sekali berbeda), HTTP berguna: frontend yang dibangun dengan beberapa teknologi dengan build yang didukung dengan teknologi lain, mengakses sumber daya di web melalui URL. Sedangkan biasanya jika Anda menggunakan protokol koneksi tingkat rendah seperti TCP / UDP Anda mungkin mengatur komunikasi dengan sistem dengan teknologi serupa (misalnya aplikasi Java yang berbeda). Apakah ini benar? Saya mencoba untuk memahaminya sendiri.
Nicola Amadio

0

agar dua titik akhir dapat berbicara satu sama lain, keduanya harus mengikuti serangkaian aturan. di komputer, seperangkat aturan ini disebut protokol.

misalnya untuk titik akhir seperti browser dan untuk yang lain seperti server web, keduanya harus mengikuti seperangkat aturan atau protokol yang disebut http untuk dapat berkomunikasi dan bertukar informasi. jadi di world wide web dan jenis komunikasi ini hanya mereka yang berbicara berdasarkan protokol http ini yang dapat berhasil berbicara satu sama lain.

soket hanyalah titik akhir. itu bisa mengikuti protokol http untuk datang dalam komunikasi di www sebagai klien yang meminta halaman atau bisa bertindak sebagai server yang mendengarkan koneksi. atau mungkin bisa mengikuti seperangkat aturan atau protokol lain seperti ssh, ftp dan berkomunikasi dengan cara lain.

sekarang dalam pemrograman soket Anda dapat membuat soket, mengikatnya ke alamat ip dan nomor port untuk bertindak sebagai nomor port dan menyuruhnya mengikuti http, ssh, ftp atau apa pun yang Anda inginkan berdasarkan komunikasi yang ingin Anda gunakan. soket untuk.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.