Stream socket là một trong bốn loại của socket, là một điểm cuối (end-point) của liên kết truyền thông hai chiều (two-way communication) giữa hai chương trình chạy trên mạng. Các lớp Socket được sử dụng để kết nối giữa client và server, được ràng buộc với một cổng port (thể hiện là một con số cụ thể) để các tầng TCP (TCP Layer) có thể định danh ứng dụng mà dữ liệu sẽ được gửi tới.
Lập trình socket là lập trình cho phép người dùng kết nối các máy tính truyền tải và nhận dữ liệu từ máy tính thông qua mạng.
Hiểu đơn giản, socket là thiết bị truyền thông hai chiều gửi và nhận dữ liệu từ máy khác.
Thông qua TCP/IP và UDP, socket sẽ tiến hành truyền và nhận dữ liệu Internet. Từ đó tạo nên một cầu nối giữa client và server. Điều kiện để hoạt động này diễn ra là có đủ thông tin về thông số IP và giữ liệu cổng của hai process muốn kết nối với nhau.
Hai ứng dụng muốn liên kết có thể nằm cùng trên một máy hoặc hai máy khác nhau đều được. Tuy nhiên, nếu hai process cùng nằm trên một máy, các số liệu bắt buộc phải khác nhau hoàn toàn. Đây cũng là điều kiện cần thiết để socket io có thể tiến hành hoạt động.
Ưu điểm lớn nhất để socket trở nên cần thiết là nó có thể tương thích với hầu hết các hệ điều hành, từ Windows, Linux cho đến Mac OS X… Ngoài ra, socket còn có thể kết hợp với rất nhiều ngôn ngữ lập trình như: C, C++, Java, Visual Basic, Visual C++… Có thể thấy rằng socket phù hợp để sử dụng ở mọi điều kiện và hoàn cảnh khác nhau.
Đặc biệt là lập trình viên cũng có thể chạy song song nhiều socket trong cùng một lúc. Điều này giúp rút ngắn thời gian và tăng hiệu suất hoạt động.
Với những ưu điểm tuyệt vời như vậy, socket đương nhiên trở thành một công cụ phổ biến trong ngành lập trình.
Socket chia làm 4 phân loại khác nhau.
Dựa trên giao thức TCP (Tranmission Control Protocol), stream socket được thiết lập giao tiếp 2 chiều theo mô hình client và server, được gọi là socket hướng kết nối.
Stream Socket giúp quá trình truyền gửi diễn ra nhanh chóng và đúng thời hạn. Ngoài ra, với yếu tố đảm bảo, người dùng cũng có thể yên tâm dữ liệu sẽ được chuyển đến đúng người nhận với độ tin cậy tuyệt đối.
Mỗi một hành động diễn ra trong quá trình dịch chuyển thông tin đều sẽ được ghi lại kết quả và truyền về cho người dùng dù có thành công hay không. Các bản ghi dữ liệu cũng không hề có giới hạn nào, bạn có thể thoải mái truyền bao nhiêu thông tin tùy thích.
Song song với đó, Stream socket còn sở hữu hai cơ chế bao gồm quản lý luồng lưu thông trên mạng và chống tắc nghẽn nhằm tối ưu hóa thời gian truyền dữ liệu.
Điều kiện để sử dụng Stream socket là phải có địa chỉ IP rõ ràng giữa 2 đầu kết nối. Các thông tin được gửi đi tuần tự theo kế hoạch lên trước. Mỗi thông điệp được thực hiện phải có thông báo trả về mới được tính là hoàn thành.
Ngoài ra, Stream Socket hoạt động dựa trên mô hình lắng nghe và chấp nhận. Có nghĩa rằng giữa hai process phải có một bên yêu cầu kết nối trước.
Giao thức này đảm bảo dữ liệu được truyền đến nơi nhận một cách đáng tin cậy, đúng tuần tự nhờ vào cơ chế quản lý luồng lưu thông trên mạng và cơ chế chống tắc nghẽn.
Datagram Socket hay còn gọi socket không hướng kết nối, là socket hoạt động thông qua giao thức UDP (User Datagram Protocol). Datagram Socket có thể hoạt động kể cả khi không có sự thiết lập kết nối giữa hai máy với nhau. Hay nói một cách khác, đây cũng chính là định nghĩa cho câu hỏi: “Giao thức UDP là gì ?“
Quá trình kết nối và truyền tải thông tin đơn giản, không cần thực hiện nhiều thao tác.
Thời gian truyền tải dữ liệu cực nhanh.
Quá trình truyền thông tin không đảm bảo tin cậy, thông tin có thể truyền sai thứ tự hoặc bị lặp.
Web socket là giao thức hỗ trợ giao tiếp hai chiều giữa client và server để tạo một kết nối trao đổi dữ liệu. Giao thức này không sử dụng HTTP mà thực hiện nó qua TCP. Mặc dù được thiết kế để chuyên dùng cho các ứng dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào.
WebSocket cung cấp giao thức giao tiếp hai chiều mạnh mẽ. Nó có độ trễ thấp và dễ xử lý lỗi. Websocket thường được sử dụng cho những trường hợp yêu cầu real time như chat, hiển thị biểu đồ hay thông tin chứng khoán.
Một số nhược điểm của Websocket mà bạn cần lưu ý khi sử dụng có thể kể đến như:
Unix socket là một điểm giao tiếp để trao đổi dữ liệu giữa các ứng dụng trên cùng một máy tính. Khác với giao thức TCP/IP thực hiện ở giao thức mạng, Unix socket thực hiện ở nhân hệ điều hành, nhờ vậy có thể tránh được các bước như kiểm tra hoặc routing, đem lại tốc độ kết nối nhanh hơn và nhẹ hơn so với TCP/IP.
So với TCP/IP, Unix socket giúp tốc độ truy cập MySQL tăng 30-50%, giảm latency từ 60ms xuống còn 5ms, PostgreSQL tăng hơn 30%, Redis tăng 50%,…
Tuy nhiên Unix socket không thể kết nối hai ứng dụng bằng kết nối Unix socket nếu chúng ta có dự định scale ứng dụng ở nhiều máy chủ khác nhau, kể cả private network.
Bản chất Unix socket là một “tập tin” trên máy chủ nên thỉnh thoảng vấn đề phân quyền sẽ khiến bạn hơi đau đầu để giải quyết.
Thông tin tư vấn
Xem thêm: Local host là gì? Cách cài đặt local host nhanh nhất 2022