Trong cấu trúc máy tính socket là gì

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.

Trong cấu trúc máy tính 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.

Dịch vụ Cloud VPS Giá Rẻ chất lượng cao

BKHOST đang có chương trình khuyến mãi cực shock dành cho khách hàng đăng ký Cloud VPS Giá Rẻ:

  • Giảm giá lên đến 25%.
  • Giá chỉ từ 87k/tháng.
  • Tặng thêm 512MB Ram.

Đăng ký ngay:

vps rẻ

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?

Trong cấu trúc máy tính socket là gì
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.

Trong cấu trúc máy tính socket là gì

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ạng và Chố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.

Trong cấu trúc máy tính socket là gì

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

Trong cấu trúc máy tính socket là gì

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ụ:

switch (socket.readyState) {
  case WebSocket.CONNECTING:
    // do something
    break;
  case WebSocket.OPEN:
    // do something
    break;
  case WebSocket.CLOSING:
    // do something
    break;
  case WebSocket.CLOSED:
    // do something
    break;
  default:
    // this never happens
    break;
}

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

socket.onopen = function(event) {
  // handle open event
};

Sử dụng addEventListener()

socket.addEventListener("open", function(event) {
  // handle open event
});

onmessage

socket.onmessage = function(event) {
  var data = event.data;
  // process data as string, blob, or ArrayBuffer
};

Sử dụng addEventListener()

socket.addEventListener("message", function(event) {
  var data = event.data;
  // process data as string, blob, or ArrayBuffer
});

onerror

socket.onerror = function(event) {
  // handle error event
};

Sử dụng addEventListener()

socket.addEventListener("error", function(event) {
  // handle error event
});

onclose

socket.onclose = function(event) {
  var code = event.code;
  var reason = event.reason;
  var wasClean = event.wasClean;
  // handle close event
};

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

socket.addEventListener("close", function(event) {
  var code = event.code;
  var reason = event.reason;
  var wasClean = event.wasClean;
  // handle close event
});

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ụ:

var data = new ArrayBuffer(1000000);
// perform some operations on the ArrayBuffer
socket.send(data);
if (socket.bufferedAmount === 0) {
  // data sent
}
else {
  // data did not send
}

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.