**WebSocket** là một giao thức truyền tin dựa trên kết nối TCP. Giao thức WebSocket tuân theo tiêu chuẩn IETF là RFC 6455 năm 2011 và WebSocket API sử dụng trên Web IDL đang được W3C chuẩn hóa. WebSocket API cho phép mở phiên giao tiếp tương tác hai chiều giữa trình duyệt của người dùng và máy chủ. Sử dụng giao thức này, bạn có thể gửi tin nhắn đến máy chủ và nhận các phản hồi theo hướng sự kiện mà không cần phải gửi gói tin thăm dò đến máy chủ để có hồi đáp.

Mặc dù cùng hoạt động trên các cổng 443 và 80 tương tự như HTTP nhưng WebSocket và HTTP là hai giao thức khác nhau. Cả hai giao thức đều nằm ở lớp 7 trong mô hình OSI và phụ thuộc vào TCP ở lớp 4. RFC 6455 tuyên bố rằng WebSocket "được thiết kế để hoạt động trên các cổng HTTP 443 và 80 nhằm mục đích hỗ trợ hoạt động trên HTTP proxy và lớp trung gian khác".

Giao thức chuẩn thông thường của WebSocket là `ws://`, giao thức secure mã hóa là `wss://`. Gói tin giao tiếp được hỗ trợ ở cả dạng text và binary. Mặc dù được thiết kế để triển khai trên trình duyệt cho các ứng dụng Web nhưng Websocket vẫn có thể dùng trong các loại ứng dụng khác. Nhờ là giao thức truyền tin dễ sử dụng, 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 trao đổi real-time như ứng dụng chat, bảng giá chứng khoán hay các biểu đồ động.

Giao thức con sử dụng WebSocket
-------------------------------

Giao thức WebSocket hỗ trợ sử dụng giao thức con. Phía máy khách có thể yêu cầu máy chủ sử dụng một giao thức con cụ thể bằng cách thêm trường *Sec-WebSocket-Protocol* vào header trong gói tin bắt tay của nó. Nếu nó được máy chủ chấp nhận, máy chủ máy chủ cũng sẽ trả lại giá trị tương ứng về giao thức con đã chọn trong phản hồi của nó để kết nối được thiết lập.

Triển khai trên trình duyệt
---------------------------

Giao thức WebSocket tương thích với hầu hết các trình duyệt mới, nó được triển khai trên các trình duyệt từ các phiên bản Firefox 7, Safari 6, Google Chrome 14, Opera 12.10 và Internet Explorer 10.

Mặc dù ở một số trình duyệt phiên bản cũ hơn có thể vẫn hỗ trợ WebSocket nhưng không đầy đủ, kém an toàn hơn giao thức đã được triển khai trong các phiên bản trên hoặc bị vô hiệu hóa do có các lỗ hổng bảo mật như trong Firefox 4 và 5, và Opera 11.

### Ví dụ triển khai bằng JavaScript

```
// Tạo đối tượng WebSocket mới với URI wss là tham số
const socket = new WebSocket('wss://game.example.com/ws/updates');

// Kích hoạt khi kết nối WebSocket được mở
socket.onopen = function () {
 setInterval(function() {
 if (socket.bufferedAmount == 0)
 socket.send(getUpdateData());
 }, 50);
};

// Kích hoạt khi nhận dữ liệu qua WebSocket
socket.onmessage = function(event) {
 handleUpdateData(event.data);
};

// Kích hoạt khi kết nối WebSocket đóng lại
socket.onclose = function(event) {
 onSocketClose(event);
};

// Kích hoạt khi kết nối WebSocket bị đóng do lỗi
socket.onerror = function(event) {
 onSocketError(event);
};

```

Tham khảo
---------

1. ↑  "RFC 6455 - The WebSocket Protocol". *datatracker.ietf.org*. Lưu trữ bản gốc ngày 24 tháng 3 năm 2022. Truy cập ngày 25 tháng 3 năm 2022.
2. ↑  Fette, I.; Melnikov, A. (2011). "The WebSocket Protocol". doi:10.17487/rfc6455. ISSN 2070-1721. Bản gốc lưu trữ ngày 11 tháng 1 năm 2022. Truy cập ngày 11 tháng 1 năm 2022. Chú thích journal cần `|journal=` (trợ giúp)
3. ↑  Pimentel, Victoria; Nickerson, Bradford G. (tháng 7 năm 2012). "Communicating and Displaying Real-Time Data with WebSocket". *IEEE Internet Computing*. **16** (4): 45–53. doi:10.1109/MIC.2012.64. ISSN 1941-0131. Bản gốc lưu trữ ngày 11 tháng 1 năm 2022. Truy cập ngày 11 tháng 1 năm 2022.
4. ↑  "Protocol upgrade mechanism - HTTP | MDN". *developer.mozilla.org* (bằng tiếng Anh). Lưu trữ bản gốc ngày 13 tháng 1 năm 2022. Truy cập ngày 11 tháng 1 năm 2022.
5. ↑  "WebSocket - Web APIs | MDN". *developer.mozilla.org* (bằng tiếng Anh). Lưu trữ bản gốc ngày 11 tháng 1 năm 2022. Truy cập ngày 11 tháng 1 năm 2022.
6. ↑  "WebSocket disabled in Firefox 4 – Mozilla Hacks - the Web developer blog". *Mozilla Hacks – the Web developer blog* (bằng tiếng Anh). Lưu trữ bản gốc ngày 11 tháng 1 năm 2022. Truy cập ngày 11 tháng 1 năm 2022.
7. ↑  "Regarding WebSocket". *Opera blogs*. Lưu trữ bản gốc ngày 9 tháng 5 năm 2011.