Bây giờ, nó là gì?
Một ổ cắm, hoặc "ổ cắm" có thể là một số điều:
Trước hết, đó là một mô hình suy nghĩ và giao diện lập trình ứng dụng (API) . Điều đó có nghĩa là bạn có một bộ quy tắc bạn cần tuân theo và một bộ chức năng mà bạn có thể sử dụng để viết các chương trình làm một việc gì đó, theo một hợp đồng được chỉ định chính xác. Trong trường hợp cụ thể này, một cái gì đó có nghĩa là trao đổi dữ liệu với một chương trình khác.
API socket chỉ tóm tắt rộng rãi các chi tiết về "giao tiếp" nói chung. Nó gói gọn những người bạn nói chuyện và làm thế nào, tất cả thông qua một (gần như) mẫu cắt cookie nhất quán và giống hệt nhau.
Bạn có thể tạo các ổ cắm trong các "miền" khác nhau (chẳng hạn như "ổ cắm unix" hoặc "ổ cắm internet") và các loại giao tiếp khác nhau (ví dụ: ổ cắm "datagram" hoặc ổ cắm "luồng") và nói chuyện với những người nhận khác nhau và mọi thứ hoạt động giống hệt nhau (tốt, 99%, rõ ràng có những khác biệt nhỏ mà bạn sẽ phải tính đến).
Bạn không cần biết (và thậm chí bạn không muốn biết!) Cho dù bạn nói chuyện với một chương trình khác trên cùng một máy tính hoặc trên một máy tính khác, hoặc liệu có mạng IPv4 hoặc IPv6 ở giữa các máy tính đó, hoặc có thể một số khác giao thức mà bạn chưa bao giờ nghe nói đến.
socket
cũng là tên của hàm thư viện (hay tòa nhà chọc trời) tạo ra "ổ cắm ", đây là một loại tệp đặc biệt (mọi thứ trong Unix là một tệp).
Làm thế nào để nó so sánh với ...
ổ cắm rơi vào cùng loại với ống và tên ống
Một đường ống là một phương tiện giao tiếp một chiều giữa người đọc và người viết (cả hai đều là chương trình) trên cùng một máy tính. Nó mô phỏng một luồng dữ liệu (giống như TCP).
Đó là, không có "thông điệp" hoặc "khối dữ liệu" riêng lẻ nào tồn tại theo quan điểm của đường ống. Bạn có thể sao chép bất kỳ lượng dữ liệu nào vào "một đầu" và người khác có thể đọc bất kỳ lượng dữ liệu nào (không nhất thiết phải giống nhau và không nhất thiết trong một lần) ở "đầu kia" theo cùng thứ tự byte như bạn đã đẩy nó vào
Một ống có tên là, đơn giản là một ống sở hữu một tên trong hệ thống tập tin . Đó là, nó trông giống và hoạt động giống như một tệp, nó xuất hiện trong danh sách thư mục và bạn có thể mở nó, ghi vào nó, v.v. Lưu ý rằng bạn cũng có thể tạo các tệp đặc biệt của socket (đó sẽ là một socket có tên) .
Mặt khác, ổ cắm là phương tiện giao tiếp hai chiều ("song công"), có nghĩa là bạn có thể ghi và đọc từ cùng một ổ cắm và bạn không cần hai ổ cắm riêng biệt để liên lạc hai chiều.
Ngoài ra, một ổ cắm có thể hoạt động như một luồng (giống hệt với đường ống) hoặc nó có thể gửi các tin nhắn rời rạc, không đáng tin cậy hoặc nó có thể gửi các tin nhắn rời rạc, có trật tự (hai đầu tiên hoạt động trên bất kỳ miền nào, chỉ cuối cùng trên "miền unix" ). Nó có thể gửi tin nhắn (hoặc mô phỏng một luồng) cho ai đó trên một máy tính hoàn toàn khác. Một ổ cắm thậm chí có thể thực hiện một hình thức giao tiếp một-nhiều (multicast) trong một số điều kiện.
Với ý nghĩ đó, rõ ràng là các socket làm một cái gì đó phức tạp hơn nhiều và thường có nhiều chi phí hơn so với đường ống (về cơ bản không quá đơn giản memcpy
đến và từ một bộ đệm!), Nhưng nếu bạn tạo các socket cục bộ (tức là trên cùng một máy tính), hệ điều hành thường áp dụng một đường dẫn nhanh được tối ưu hóa mạnh mẽ, vì vậy thực sự không có nhiều sự khác biệt.
giao tiếp giữa các quá trình đôi khi được đề cập liên quan đến các mạng
Có, ổ cắm là một cách có thể của giao tiếp giữa các quá trình (bộ nhớ dùng chung và đường ống là ví dụ về các lựa chọn thay thế). Tất cả cùng một lúc, chúng đang được sử dụng để "kết nối", như đã giải thích ở trên.