Nội dung bài viết
#

Socket là gì? Tìm hiểu các loại socket phổ biến hiện nay

Nội dung bài viết

    Socket là một thuật ngữ khá phổ biến trong lĩnh vực Công nghệ thông tin. Nhưng nếu bạn chưa hiểu rõ về Socket và đang muốn tìm hiểu về nó thì bài viết này là dành cho bạn. Ok, hãy cùng BKHOST bắt đầu ngay thôi nào.

    Socket là gì?

    Socket là gì?

    Hiểu một cách đơn giản, Socket được ví như một cáp sạc điện thoại, khi cắm nó vào ổ cắm điện thì nó sẽ truyền tải điện từ ổ cắm sang điện thoại.

    Ví dụ, khi bạn Ultraview hay Teamviewer để remote vào một máy tính khác thì Socket cũng hoạt động tương tự như vậy, nó là một cổng kết nối Internet, giúp chương trình của máy này có thể kết nối với chương trình của máy khác.

    Hay nói cách khác, Socket là điểm cuối trong một liên kết hai chiều của hai chương trình chạy trên mạng. Mục đích của Socket là cho phép 1 process giao tiếp với 1 process khác.

    Ngoài ra Socket còn có chức năng chính là tạo liên kết giữa client và server nhờ vào cổng (Port). Tại đây các tầng TCP (TCP layer) có thể định danh ứng dụng và dữ liệu được truyền tới bằng liên kết của các lớp Socket.

    Vì sao nên dùng Socket?

    Một trong những lý do chính khiến Socket trở thành công cụ phổ biến của các lập trình viên là nó có thể tương thích trên hầu hết các hệ điều hành như Windows, Linux, MacOs,… Không những thế, Socket còn có thể kết hợp với nhiều ngôn ngữ lập trình khác nhau như: Java, C, C++, Visual Basic,…

    Ngoài ra, lập trình viên có thể chạy song song nhiều Socket cùng lúc và liên tục. Việc này giúp tăng hiệu suất là việc, rút ngắn thời gian xây dựng sản phẩm.

    Socket hoạt động như thế nào?

    Socket hoạt động như thế nào?
    Socket đảm bảo liên kết dữ liệu giữa client và server thông qua TCP và UDP

    Nhiệm vụ chính của Socket là kết nối giữa client và Server, quá trình gửi và nhận dữ liệu sẽ thông qua giao thức TCP/IP và UDP. Để hai chương trình kết nối với nhau trên môi trường có internet, điều kiện cần có là phải xác định được thông tin địa chỉ IP và số hiệu Port của hai chương trình thì Socket mới có thể hoạt động.

    Chúng ta có thể liên kết hai chương trình trên cùng một máy hoặc hai máy khác nhau. Tuy nhiên, đối với trường hợp cùng máy thì bắt buộc số liệu về IP và Port giữa hai chương trình phải khác nhau hoàn toàn.

    Phân loại Socket

    Các loại Socket có thể giao tiếp với nhau mà không bị hạn chế bởi việc cùng loại hay khác loại.

    Để hiểu sâu hơn về Socket, chúng ta sẽ tìm hiểu đến các loại Socket. Tùy vào mức độ sử dụng nhiều hay ít mà Socket được hiện hành với 4 loại:

    • Stream Sockets.
    • Datagram Sockets.
    • Raw Sockets.
    • Sequenced Packet Sockets.

    Stream Sockets

    Streams Socket hay còn gọi là Socket TCP, nó hoạt động dựa trên giao thức TCP và được phát triển theo thiên hướng kết nối. Tức là nó chỉ hoạt động khi có sự liên kết thành công giữa máy chủ và máy khách.

    Stream Sockets

    Với Stream Socket, quá trình trao đổi dữ liệu sẽ diễn ra một cách nhanh chóng và chính xác. Dữ liệu sẽ được đảm bảo gửi đi đúng điểm nhận, người dùng hoàn toàn có thể yên tâm về độ tin cậy cao của Stream Socket.

    Ngoài ra, nó còn ghi lại thông tin dịch chuyển dữ liệu trong quá trình truyền tải dữ liệu và gửi thông báo về cho người dùng với bất kỳ kết quả nào dù là thành công hay thất bại, giúp người dùng quản lý được quá trình truyền tải dữ liệu cũng như sớm phát hiện ra lỗi. Bản ghi của Stream Socket là không giới hạn, bạn có thể sử dụng tùy thích.

    Stream Socket còn có hai cơ chế là Quản lý luồng lưu thông trên mạngChống tắc nghẽn, giúp cho quá trình truyền tải dữ liệu được mượt mà và tiết kiệm thời gian.

    Tóm tắt thông tin về Stream Sockets:

    • Phải xác định địa chỉ IP rõ ràng giữa 2 process cần kết nối.
    • Gửi thông tin theo trình tự cụ thể và được lên kế hoạch từ trước.
    • Một trong 2 process phải gửi yêu cầu liên kết trước.
    • Hoạt động trên mô hình client/ server – Mô hình lắng nghe và chấp nhận.
    • Mỗi thông điệp gửi đi đều phải có thông báo gửi về thì mới được tính là hoàn thành.

    Datagram Sockets

    Ngược lại với Stream Sockets, Datagram Sockets hoạt động theo hướng không kết nối và dựa vào giao thức UDP. Tức là nó không cần có sự kết nối thành công giữa client và server để hoạt động mà chỉ cần cung cấp connection-less point để nó thực hiện quá trình gửi và nhận thông tin.

    Datagram Sockets

    Nhờ vào việc không cần thiết lập kết nối giữa client và server nên quá trình trao đổi dữ liệu giữa hai process diễn ra với rất nhanh và đơn giản. Nó phù hợp để vận dụng vào các hoạt động đòi hỏi truyền dữ liệu nhanh như nhắn tin, chat game online,…

    Tóm tắt thông tin về Datagram Sockets:

    • Thông quan Datagram Sockets, hai process có thể kết nối với nhau mà không cần xác định rõ thông tin IP.
    • Để gửi thông điệp đúng người nhận thì thông điệp gửi đi phải kèm thông điệp của người nhận.
    • Có thể gửi một thông điệp nhiều lần nhưng không được gửi cùng lúc.
    • Không đảm bảo kết quả của tiến trình, thông điệp có thể không đến được tay người nhận.
    • Thứ tự hoàn thành tiến trình không chính xác, người gửi sau có thể đến trước hoặc ngược lại
    • Điều kiện để kết nối giữa 2 process là một trong 2 bên phải cung cấp port của Socket mà mình đang dùng.

    Raw Sockets

    Raw Sockets cho phép người dùng truy cập vào các giao thức truyền thông media cấp thấp, giúp trừu tượng hóa Socket. Socket này hoạt động theo thiên hướng của Datagram. Nó không phù hợp với người dùng phổ thông mà thường tập trung vào những đối tượng quan tâm đến các giao thức truyền thông mới hoặc cần có quyền để truy cập vào các phương tiện có giao thức chuyên sâu và khó hiểu hơn.

    Sequenced Packet Sockets

    Sequenced-packet sockets hoạt động theo thiên hướng Streams Sockets trừ việc giới hạn bản ghi được giữ nguyên. Nó được cung cấp như một phần của trừu tượng hóa Sockets và giữ vai trò vô cùng quan trọng đối với các ứng dụng hệ thống mạng nghiêm trọng. Nó cung cấp quyền cho người dùng thao tác trên SPP (Tiêu đề của giao thức) hoặc IDP (Giao thức gói dữ liệu Internet) trên một hoặc nhiều gói, người dùng có thể viết tiêu đề nguyên mẫu cùng với các dữ liệu được gửi đi. Ngoài ra, nó còn có thể chỉ định một tiêu đề cụ thể mặc định sẽ được kết hợp với các dữ liệu gửi đi. Song song đó nó còn cho phép nhận các tiêu đề của các gói đến.

    Bonus: Tìm hiểu thêm về Websocket

    Xem bài viết chi tiết: Websocket là gì?

    So với các loại Sockets trên thì Websocket là ứng dụng được sử dụng nhiều nhất nhờ vào những lợi ích to lớn mà nó mang lại.

    Websocket là một module giúp kết nối giữa client và server một cách nhanh chóng và ít tốn kém. Nó hoạt động dựa vào giao thức TCP mà không cần đến HTTP.

    Tuy được thiết kế chuyên dụng cho web nhưng nó lại hỗ trợ hầu như tất cả các ứng dụng cần trao đổi dữ liệu trên môi trường có internet. Lập trình viên có thể sử dụng nó vào bất kỳ ứng dụng nào.

    Ưu điểm

    Websocket là loại Socket chứa hầu hết ưu điểm từ những loại sockets khác như:

    • Khả năng xảy ra delay là rất thấp.
    • Dễ phát hiện và xử lý lỗi một cách dễ dàng.
    • Không cần bổ sung thêm phần mềm hỗ trợ nào.
    • Không cần sử dụng nhiều phương thức kết nối phức tạp.
    • Tốc độ dịch chuyển thông tin nhanh và chính xác, phù hợp cho các ứng dụng mang tính chất realtime như: chat online, chart chứng khoán,…

    Cấu trúc WebSocket

    Cấu trúc WebSocket

    Ta thường bắt gặp giao thức của HTTP có cấu trúc thông thường là http:// hoặc https:// thì tương tự giao thức WebSocket cũng có 2 cấu trúc chuẩn như sau:

    • Cấu trúc phổ biến: ws://
    • Cấu trúc giao thức secure: wss://

    Cấu trúc của Websocket biểu hiện cho sự kết nối của máy chủ và website, thường được ghi ở phần đầu của một URL. Ví dụ: ws://abc.com

    Các thuộc tính của WebSocket

    Ready State: Đây là thuộc tính thể hiện trạng thái kết nối giữa server và client.

    Các giá trị của nó bao gồm:

    • Giá trị bằng 0 (WebSocket.CONNECTING): Thể hiện cho việc kết nối chưa được thiết lập.
    • Giá trị bằng 1 (WebSocket.OPEN): Thể hiện cho việc kết nối đã được thiết lập, lúc này client và server có thể giao tiếp với nhau.
    • Giá trị bằng 2 (WebSocket.CLOSING): Thể hiện cho việc kết nối đang chuẩn bị đóng.
    • Giá trị bằng 3(WebSocket.CLOSED): Thể hiện cho việc kết nối đã được đóng hoặc bạn không thể mở kết nối được nữa.

    Buffered Amount: Đây là thuộc tính dùng để thể hiện số byte của UTF-8 khi sử dụng phương thức gửi (send ()).

    Ví dụ:

    {{EJS0}}

    Bộ xử lý sự kiện WebSocket (Event Handlers)

    SỰ KIỆNEVENT HANDLERMÔ TẢ
    openonopenSự kiện open này thông báo việc Websocket đã được khởi tạo. Callback tương ứng với sự kiện này là onopen.
    messageonmessageSự kiện message này thông báo client đã nhận được dữ liệu được gửi từ server. Callback tương ứng với sự kiện này là onmessage.
    erroronerrorSự kiện error này thông báo rằng đã có lỗi xảy ra trong quá trình kết nối của Websocket. Callback tương ứng với sự kiện này là onerror.
    closeoncloseSự kiện close này thông báo rằng kết nối đã được đóng. Callback tương ứng với sự kiện là onclose.

    Bạn có thể sử dụng phương thức addEventListener() để các ứng dụng có thể lắng nghe sự kiện:

    Ví dụ:

    onopen

    {{EJS1}}

    Sử dụng addEventListener()

    {{EJS2}}

    onmessage

    {{EJS3}}

    Sử dụng addEventListener()

    {{EJS4}}

    onerror

    {{EJS5}}

    Sử dụng addEventListener()

    {{EJS6}}

    onclose

    {{EJS7}}

    Thực hiện handler onClose sự kiện sử dụng addEventListener()

    {{EJS8}}

    Các phương thức của WebSocket

    send(): Gửi dữ liệu tới server. Message data là string, ArrayBuffer, blob.

    close(): Đóng kết nối đang tồn tại.

    Ví dụ:

    {{EJS9}}

    Tổng kết về Socket

    Hy vọng, qua bài viết này, bạn đã hiểu hơn về Socket. Nếu bạn có bất cứ thắc mắc nào liên quan đến Socket, hãy để lại bình luận ở bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.

    P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về quản trị mạng, server, vps, hosting, domain,… Chúc bạn thành công.

    Mua tên miền .COM tại BKHOST

    BKHOST cam kết giá tốt. Kiểm tra tên miền .COM đẹp và đăng ký ngay hôm nay!

    tên miền .com giá rẻ

    Tôi là Trịnh Duy Thanh, CEO & Founder Công ty Cổ Phần Giải Pháp Mạng Trực Tuyến Việt Nam - BKHOST. Với sứ mệnh mang tới các dịch vụ trên Internet tốt nhất cho các cá nhân và doanh nghiệp trong nước và quốc tế, tôi luôn nỗ lực hết mình nâng cấp đầu tư hệ thống phần cứng, nâng cao chất lượng dịch vụ chăm sóc khách hàng để đem đến những sản phẩm hoàn hảo nhất cho người tiêu dùng. Vì vậy, tôi tin tưởng sẽ đem đến các giải pháp CNTT mới nhất, tối ưu nhất, hiệu quả nhất và chi phí hợp lý nhất cho tất cả các doanh nghiệp.
    Bình luận

    Trượt lên đầu trang
    Gọi ĐT tư vấn ngay
    Chat ngay qua Zalo
    Chat ngay qua Messenger
    Bạn đã hài lòng với trải nghiệm trên Bkhost.vn?
    Cảm ơn lượt bình chọn của bạn, Chúc bạn 1 ngày tốt lành !