Websocket là gì? Làm quen với Websocket tronng 5 phút

Đăng bởi : Admin | Lượt xem : 2182 | Chuyên mục : HTML5

WebSoket là một công nghệ mới xuất hiện trong HTML5 hỗ trợ giao tiếp hai chiều giữa client và server bằng cách sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém. Trong bài viết này VNCoder sẽ giúp các bạn làm quen và tìm hiểu về WebSoket một cách nhanh nhất

WebSoket là công nghệ hỗ trợ giao tiếp hai chiều giữa client và server bằng cách sử dụng một TCP socket để tạo một kết nối hiệu quả và ít tốn kém. Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào.

  • WebSockets mới Open trong HTML5, là một kỹ thuật Reverse Ajax. WebSockets được cho phép những kênh tiếp xúc song song hai chiều và hiện đã được tương hỗ trong nhiều trình duyệt ( Firefox, Google Chrome và Safari ). Kết nối được mở trải qua một HTTP request ( nhu yếu HTTP ), được gọi là link WebSockets với những header đặc biệt quan trọng. Kết nối được duy trì để bạn hoàn toàn có thể viết và nhận tài liệu bằng JavaScript như khi bạn đang sử dụng một TCP socket đơn thuần .
  • Dữ liệu truyền tải trải qua giao thức HTTP ( thường dùng với kĩ thuật Ajax ) chứa nhiều tài liệu không thiết yếu trong phần header. Một header request / response của HTTP có size khoảng chừng 871 byte, trong khi với WebSocket, kích cỡ này chỉ là 2 byte ( sau khi đã liên kết ). Vậy giả sử bạn làm một ứng dụng game hoàn toàn có thể tới 10,000 người chơi đăng nhập cùng lúc, và mỗi giây họ sẽ gửi / nhận tài liệu từ server. Hãy so sánh lượng tài liệu header mà giao thức HTTP và WebSocket trong mỗi giây :
  • HTTP : 871 x 10,000 = 8,710,000 bytes = 69,680,000 bits per second ( 66 Mbps )
  • WebSocket : 2 x 10,000 = 20,000 bytes = 160,000 bits per second ( 0.153 Kbps ) Như bạn thấy chỉ riêng phần header thôi cũng đã chiếm một phần lưu lượng đáng kể với giao thức HTTP truyền thống cuội nguồn .

Giao thức bắt tay của WebSocket

Để thực hiện kết nối, client phải gửi một WebSocket handshake request đến server. Server sẽ gửi trả lại WebSocket handshake response như bên dưới:

Client request :

GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com

Server response : ( Server Architecture )

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

Để xác nhận việc liên kết, client sẽ gửi một giá trị Sec-WebSocket-Key được mã hóa bằng Based64 đến server. Sau đó bên server sẽ triển khai : – Nối thêm chuỗi cố định và thắt chặt là “ 258EAFA5 – E914-47DA-95CA-C5AB0DC85B11 ″ vào Sec-WebSocket-Key để được chuỗi mới là “ x3JJHMbDL1EzLkh9GBhXDw = = 258EAFA5 – E914-47DA-95CA-C5AB0DC85B11 ″. – Thực hiện mã hóa SHA-1 chuỗi trên để được “ 1 d29ab734b0c9585240069a6e4e3e91b61da1969 ″. – Mã hóa hiệu quả vừa nhận được bằng Base64 để được “ HSmrc0sMlYUkAGmm5OPpG2HaGWk = ”. – Gửi response lại client kèm với giá trị Sec-WebSocket-Accept chính là chuỗi tác dụng vừa tạo ra .
Client sẽ kiểm tra status code ( phải bằng 101 ) và Sec-WebSocket-Accept xem có đúng với hiệu quả mong đợi không và thực thi liên kết .

Ưu điểm

  • WebSockets cung cấp khả năng giao tiếp hai chiều mạnh mẽ, có độ trễ thấp và dễ xử lý lỗi. Không cần phải có nhiều kết nối như phương pháp Comet long-polling và cũng không có những nhược điểm như Comet streaming.
  • API cũng rất dễ sử dụng trực tiếp mà không cần bất kỳ các tầng bổ sung nào, so với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại, thời gian chờ timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận và các dạng truyền tải tùy chọn khác nhau (Ajax long-polling và jsonp polling).

Nhược điểm

Những điểm yếu kém của WebSockets gồm có :

  • Nó là một đặc tả mới của HTML5, nên nó vẫn chưa được tất cả các trình duyệt hỗ trợ.
  • Không có phạm vi yêu cầu nào. Do WebSocket là một TCP socket chứ không phải là HTTP request, nên không dễ sử dụng các dịch vụ có phạm vi-yêu cầu, như SessionInViewFilter của Hibernate. Hibernate là một framework kinh điển cung cấp một bộ lọc xung quanh một HTTP request. Khi bắt đầu một request, nó sẽ thiết lập một contest (chứa các transaction và liên kết JDBC) được ràng buộc với luồng request. Khi request đó kết thúc, bộ lọc hủy bỏ contest này.