Websocket là gì? Ưu nhược điểm nổi bật của Websocket
Giao thức truyền tải siêu văn bản này có nhiệm vụ truyền tải dữ liệu giữa các web server đến các trình duyệt web và ngược lại. Tuy nhiên giao thức truyền tải này có 1 nhược điểm là độ trễ cao. Websocket là công nghệ ra đời để khắc phục những hạn chế của HTTP. Vậy websocket là gì? Hãy cùng Bizfly Cloud tìm hiểu trong bài viết này nhé.
Websocket là gì?
Websocket là gì? Websocket là 1 loại công nghệ hỗ trợ giao tiếp 2 chiều giữa Client và server. Công nghệ này sử dụng giao thức TCP (Transmission Control Protocol ) để kết nối thông tin với nhau trong môi trường Internet. Hiện tại, công nghệ này đã hỗ trợ rất nhiều trình duyệt phổ biến khác nhau như: Firefox, Google Chrome và Safari…Mặc dù được thiết kế riêng cho các ứng dụng web nhưng lập trình viên vẫn có thể sử dụng nó cho bất cứ ứng dụng nào.
Ưu điểm của websocket là gì?
Bởi vì websocket cung cấp giao thức 2 chiều rất mạnh mẽ nên có độ trễ rất thấp và dễ sửa lỗi. Thông tin trả về từ websocket là vô cùng nhanh chóng nên nó được sử dụng trong nhiều trường hợp cần thời gian thực như là chat, hiển thị biểu đồ hay thông tin chứng khoán… Trong những trường hợp này, bạn không thể dùng HTTP để kết nối vì nếu gửi lệnh AJAX liên tiếp tới server để lấy dữ liệu mới và cập nhật chúng lên màn hình, như thế sẽ tốn nhiều tài nguyên, traffic và thời gian trả lại không chính xác.
Ngoài ra ưu điểm của Websocket là gì nữa? Khi sử dụng giao thức TCP để kết nối bằng websocket, hệ thống không cần quá nhiều kết nối như phương pháp Comet long-polling đồng thời khắc phục được nhiều nhược điểm của phương pháp Comet streaming. API của websocket cũng khá dễ khi sử dụng trực tiếp.
Công dụng của Websocket
WebSockets được các nhà phát triển phát minh ra để hỗ trợ hiệu quả các kết quả theo thời gian thực. WebSocket hoạt động bằng cách bắt đầu giao tiếp song công, liên tục giữa máy khách và máy chủ. Điều này làm giảm lưu lượng mạng không cần thiết, vì dữ liệu có thể di chuyển ngay lập tức theo cả hai cách thông qua một kết nối mở duy nhất. Ngoài ra còn cung cấp tốc độ và khả năng thời gian thực trên web.
Websockets cũng cho phép máy chủ theo dõi các máy khách và "đẩy" dữ liệu đến chúng khi cần thiết, điều này không thể thực hiện được nếu chỉ sử dụng HTTP.
Kết nối WebSocket cho phép streaming các chuỗi văn bản và dữ liệu nhị phân qua tin nhắn. WebSocket message bao gồm frame, payload, và data portion. Rất ít dữ liệu non-payload được gửi qua kết nối mạng hiện có theo cách này, giúp giảm độ trễ và chi phí, đặc biệt là khi so sánh với các mô hình HTTP request và streaming.
Google Chrome là trình duyệt đầu tiên bao gồm hỗ trợ tiêu chuẩn cho WebSockets vào năm 2009. RFC 6455 — Giao thức WebSocket — được chính thức xuất bản trực tuyến vào năm 2011. Giao thức WebSocket và API WebSocket được chuẩn hóa bởi W3C và IETF, đồng thời hỗ trợ trên các trình duyệt rất phổ thông.
So sánh giữa websocket và HTTP
Thông thường khi sử dụng giao thức kết nối HTTP để truyền tải dữ liệu với kỹ thuật Ajax sẽ tồn tại nhược điểm là có chứa nhiều dữ liệu không cần thiết ở phần header. Đối với HTTP, 1 header dùng để request/response thường có kích thước trong khoảng 871 byte. Trong khi nếu so với Websocket sau khi kết nối thì kích thước này chỉ là 2 byte.
Lấy ví dụ 1 developer tạo ra 1 ứng dụng game chẳng hạn. Ước tính ứng dụng này được 5.000 người chơi đăng nhập cùng lúc. Đồng thời, mỗi giây họ đều có thể gửi/nhận dữ liệu từ server. Làm 1 phép toán đơn giản để so sánh lượng dữ liệu header truyền tải giữa giao thức HTTP và Websocket trong mỗi giây như sau:
HTTP: 871 x 5,000 = 4,355,000 bytes = 34,790,000 bits per second (33 Mbps)
WebSocket: 2 x 5,000 = 10,000 bytes = 80,000 bits per second (0.0765 Kbps)
Sau khi đọc xong ví dụ đơn giản này cũng có thể thấy được ưu điểm vượt bậc của Websocket so với HTTP về dữ liệu truyền tải Header. Ưu điểm này giúp hiểu rõ hơn về websocket là gì và lý do vì sao nó ngày càng được sử dụng rộng rãi bởi các lập trình viên chuyên nghiệp.
Giao thức giao tiếp của websocket
Client phải gửi một WebSocket handshake request đến server để bắt đầu thực hiện kết nối. Server sau đó sẽ trả lại kết quả từ handshake request được gửi từ Socket như hình dưới đây.
Clients Request
Server response:(Server Architecture)
Client sẽ gửi một giá trị Sec-WebSocket-Key được mã hóa bằng Based64 đến server để xác nhận kết nối. Server sẽ thực hiện hành động nối thêm chuỗi cố định là chuỗi “258EAFA5-E914-47DA-95CA-C5AB0DC85B11″ vào Sec-WebSocket-Key.
Chuỗi mới được tạo thành có cấu trúc như sau: “x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11″. Sau đó chuỗi được mã hóa SHA-1 để có kết quả như sau: “1d29ab734b0c9585240069a6e4e3e91b61da1969″.
Tiếp theo, kết quả sẽ được mã hóa bằng Base64 để được kết quả sau cùng là “HSmrc0sMlYUkAGmm5OPpG2HaGWk=”. Sau khi có kết quả sau cùng, server sẽ gửi response lại Client Sec-WebSocket-Accept chính là chuỗi kết quả vừa tạo ra.
Client sẽ kiểm tra tình trạng code (bằng 101), đồng thời cũng kiểm tra Sec-WebSocket-Accept xem có đúng với kết quả mong đợi không và cuối cùng thực hiện kết nối.
Cấu trúc của websocket là gì?
Tương tự như (http:// và https://) websocket cũng có 2 chuẩn thông thường là ws:// và chuẩn secure là wss://.
Chuẩn giao tiếp là String (Message data types). Hiện tại chuẩn giao tiếp này đã hỗ trợ buffered arrays và blobs. Tuy nhiên nó vẫn chưa hỗ trợ JSON. Mặc dù vậy, vẫn có thể serialize thành String.
Bởi vì đến thời điểm hiện tại, không phải tất cả các Browser đều hỗ trợ Websocket. Vì thế muốn biết browser có hỗ trợ hay không thì có thể dùng đoạn check dưới đây.
if ('WebSocket' in window){ /* WebSocket is supported. You can proceed with your code*/ } else { /*WebSockets are not supported. Try a fallback method like long-polling etc*/}
Để khởi tạo và thiết lập kết nối tới socket, ta dùng đoạn code dưới đây.
var websocket = new WebSocket("ws://localhost:8080/socket"); // hoặc var websocket = new WebSocket("wss://localhost:8080/socket");
Các thuộc tính của websocket là gì?
ReadyState: biểu diễn trạng thái kết nối. Dưới đây là các giá trị của thuộc tính này:
- WebSocket.CONNECTING: Giá trị 0 chỉ rằng kết nối vẫn chưa được thành lập.
- WebSocket.OPEN: Giá trị 1 chỉ ra rằng kết nối đã thành lập và có thể giao tiếp
- WebSocket.CLOSING: Giá trị 2 chỉ rằng kết nối đang qua handshake đóng.
- WebSocket.CLOSED: Giá trị 3 chỉ rằng kết nối đã được đóng hoặc không thể được mở.
Buffered Amount: là thuộc tính chỉ đọc biểu diễn số byte của UTF-8 mà đã được xếp hàng bởi sử dụng phương thức send của websocket.
Các sự kiện của websocket là gì?
1. Open: Sự kiện xảy ra khi kết nối Socket được thành lập (onopen)
2. Message: Sự kiện xảy ra khi client nhận dữ liệu từ server (onmessage)
3. Error: Sự kiện xảy ra khi có bất kỳ lỗi nào trong giao tiếp (onerror)
4. Close: Sự kiện xảy ra khi kết nối được đóng (onclose)
Các phương thức của websocket là gì?
Websocket hiện tại đang tồn tại 2 phương thức cơ bản như sau:
- Send: Đây là phương thức send (data) dùng để gửi dữ liệu tới server
- Close: Đây là phương thức Close () chỉ kết nối đang tồn tại.
Ngoài ra còn có các phương thức bổ sung khác áp dụng cho từng trường hợp cụ thể.
Nhược điểm của websocket là gì?
Bời vì Websockets chỉ là một công nghệ mới xuất hiện trong HTML5 nên chưa được tất cả các trình duyệt hỗ trợ.
Không dễ sử dụng các dịch vụ cung cấp có phạm vi yêu cầu như Session In View Filter của Hibernate. Hibernate là một framework phổ biến nhằm cung cấp một bộ lọc xung quanh một HTTP request. Vì thế, 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 bắt đầu bất cứ 1 request nào. Cuối cùng nó sẽ sử dụng bộ lọc hủy bỏ contest này khi request kết thúc. Bởi vì Websocket là một TCP chứ không phải là 1 HTTP request nên việc không dễ sử dụng này là điểm hạn chế lớn nhất của websocket cho đến thời điểm hiện tại.
Đến đây, có lẽ bạn đã hiểu cơ bản websocket là gì và ưu nhược điểm của nó trong việc sử dụng làm giao thức kết nối Internet. Trong tương lai, rất có thể giao thức này sẽ phát triển chuyên sâu hơn nữa để khắc phục những nhược điểm vốn có của nó và trở thành phương án thay thế hoàn hảo cho các giao thức kết nối cũ như HTTP chẳng hạn. Mong rằng bài viết này có thể mang đến cho bạn 1 cái nhìn tổng thể và hữu ích về websocket để không phải bỡ ngỡ khi bắt đầu sử dụng nó trong tương lai. Xin cảm ơn và chúc bạn thành công.
Theo Bizfly Cloud chia sẻ
Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.
Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.
Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.
DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud