sự khác biệt giữa lập trình socket và lập trình Http


Câu trả lời:


109

HTTP là một giao thức ứng dụng. Về cơ bản, nó có nghĩa là bản thân HTTP không thể được sử dụng để vận chuyển thông tin đến / từ một điểm cuối từ xa. Thay vào đó, nó dựa vào một giao thức cơ bản mà trong trường hợp của HTTP là TCP.

nhập mô tả hình ảnh ở đây

Bạn có thể đọc thêm về các lớp OSI nếu bạn quan tâm.

Mặt khác, socket là một API mà hầu hết các hệ điều hành cung cấp để có thể nói chuyện với mạng. API socket hỗ trợ các giao thức khác nhau từ lớp truyền tải trở xuống.

Điều đó có nghĩa là nếu bạn muốn sử dụng TCP, bạn sử dụng các ổ cắm. Nhưng bạn cũng có thể sử dụng các socket để giao tiếp bằng HTTP, nhưng sau đó bạn phải giải mã / mã hóa các thông báo theo đặc tả HTTP ( RFC2616 ). Vì đó có thể là một nhiệm vụ lớn đối với hầu hết các nhà phát triển, chúng tôi cũng đã có các ứng dụng khách sẵn sàng trong các khung công tác dành cho nhà phát triển của chúng tôi (như .NET), chẳng hạn như WebClienthoặc các HttpWebRequestlớp.


2
Vì vậy, cả hai đều sử dụng TCP, chỉ là HTTP phản hồi theo định dạng được xác định trước và socket cung cấp dữ liệu được trả về từ một đầu khác của socket, phải không?
आनंद

4
Vâng. TCP đảm bảo rằng mọi thứ đều đến (lớp truyền tải) và HTTP cho biết ứng dụng web phải làm gì.
jgauffin

25

Với HTTP, bạn sử dụng giao thức HTTP cấp cao (hoạt động trên đầu ổ cắm). Nó ít phiên có nghĩa là bạn gửi yêu cầu văn bản nhưGET google.com và nhận lại dữ liệu văn bản hoặc dữ liệu nhị phân, sau khi kết nối đó bị đóng (trong HTTP 1.1 có sẵn các kết nối liên tục)

Ví dụ về 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 ();
} 

Với ổ cắm, bạn ở cấp độ thấp hơn và thực sự kiểm soát kết nối và gửi / nhận các byte thô.

Thí dụ:

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

Kết nối không bị đóng từ HTTP 1.1.
Marquis of Lorne

@EJP: phụ thuộc vào cách các Connectiontiêu đề được thiết lập;)
jgauffin

@jgauffin Chính xác. Nó không đóng cửa hoàn toàn.
Marquis of Lorne,

Đúng, nhưng đó là chi tiết OP sẽ tự khám phá cùng với 95% thông tin khác về chủ đề này.
Anri

13

Kết nối HTTP

  • Kết nối HTTP là một giao thức chạy trên một ổ cắm.
  • Kết nối HTTP là sự trừu tượng hóa cấp cao hơn của kết nối mạng.
  • Với kết nối HTTP, việc triển khai sẽ xử lý tất cả các chi tiết cấp cao hơn này và chỉ cần gửi yêu cầu HTTP (một số thông tin tiêu đề) và nhận phản hồi HTTP từ máy chủ.

Kết nối ổ cắm

  • Socket được sử dụng để vận chuyển dữ liệu giữa các hệ thống. Nó chỉ đơn giản là kết nối hai hệ thống với nhau, một địa chỉ IP là địa chỉ của máy qua mạng dựa trên IP.
  • Với kết nối socket, bạn có thể thiết kế giao thức của riêng mình để kết nối mạng giữa hai hệ thống.
  • Với kết nối Socket, bạn cần quan tâm đến tất cả các chi tiết cấp thấp hơn của kết nối TCP / IP.

1

Lập trình HTTP hoặc yêu cầu HTTP được sử dụng để ghép nối lỏng lẻo và giao tiếp công nghệ ngôn ngữ trung lập nền tảng , khi lập trình socket được sử dụng khi hệ thống có giao thức đặc tả ngôn ngữ


1
Bạn muốn nói gì về ngôn ngữ? Một ứng dụng java có thể giao tiếp với một ứng dụng Python qua ổ cắm ví dụ
Adam Hughes

Tôi nghĩ ý của anh ấy là, thông thường, nếu bạn muốn kết nối các hệ thống được ghép nối lỏng lẻo (hoặc hoàn toàn khác), HTTP rất hữu ích: một giao diện người dùng được xây dựng bằng một số công nghệ với một bản dựng được hỗ trợ bằng công nghệ khác, truy cập tài nguyên trên web thông qua URL. Trong khi thông thường, nếu bạn đang sử dụng các giao thức kết nối cấp thấp hơn như TCP / UDP, bạn có thể đang điều phối giao tiếp với các hệ thống có công nghệ tương tự (ví dụ: các ứng dụng Java khác nhau). Thê nay đung không? Tôi đang cố gắng tự hiểu nó.
Nicola Amadio

0

để hai điểm cuối có thể nói chuyện với nhau, cả hai phải tuân theo một bộ quy tắc. trong máy tính, tập hợp các quy tắc này được gọi là giao thức.

ví dụ đối với một điểm cuối như trình duyệt và cho một điểm cuối như máy chủ web, cả hai đều phải tuân theo một bộ quy tắc hoặc giao thức được gọi là http để có thể giao tiếp và giao dịch thông tin. vì vậy trong world wide web và kiểu giao tiếp này chỉ những người nói chuyện dựa trên giao thức http này mới có thể nói chuyện thành công với nhau.

socket chỉ là một điểm cuối. nó có thể tuân theo giao thức http để đến trong một giao tiếp trong www với tư cách là một máy khách yêu cầu một trang hoặc nó có thể hoạt động như một máy chủ lắng nghe các kết nối. hoặc có thể nó có thể tuân theo một bộ quy tắc hoặc giao thức khác như ssh, ftp và giao tiếp theo những cách khác.

bây giờ trong lập trình socket, bạn có thể tạo một socket, liên kết nó với một địa chỉ ip và một số cổng để hoạt động như một số cổng và yêu cầu nó tuân theo http, ssh, ftp hoặc bất cứ thứ gì bạn muốn dựa trên thông tin liên lạc mà bạn muốn sử dụng ổ cắm cho.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.