WebSocketWebSocket 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[1] 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".[2] Giao thức chuẩn thông thường của WebSocket là Giao thức con sử dụng WebSocketGiao 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.[4] Triển khai trên trình duyệtGiao 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.[5] 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,[6] và Opera 11.[7] 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
|