WebSocket

giao thức truyền tin dựa trên kết nối TCP

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 IETFRFC 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à 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.[3]

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.[4]

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.[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 WebSocketsocket.onmessage = function(event) {  handleUpdateData(event.data);};// Kích hoạt khi kết nối WebSocket đóng lạisocket.onclose = function(event) {  onSocketClose(event);};// Kích hoạt khi kết nối WebSocket bị đóng do lỗisocket.onerror = function(event) {  onSocketError(event);};

Tham khảo