Websocket là gì? Ưu – nhược điểm ra sao? Cách kết nối thế nào?
01/10/2022 02:09 am | Lượt xem : 15284
Websocket ra mắt như một xu hướng của thời đạ công nghệ số và cho phép người dùng dễ dàng hơn trong việc quản lý khách hàng, server. Tuy nhiên, nhiều người vẫn thường thắc mắc Websocket là gì? có các ưu – nhược điểm ra sao? cũng như cách kết nối thế nào? Cùng TENTEN tìm hiểu trong bài viết dưới đây nhé!
Contents
Websocket là gì?
Socket là công nghệ hỗ trợ giao tiếp hai chiều giữa máy tính khách hàng và máy chủ bằng cách sử dụng các socket TCP để tạo ra các kết nối hiệu quả và rẻ tiền. Chúng được thiết kế đặc biệt để sử dụng trong các ứng dụng web, nhưng các lập trình viên có thể tích hợp chúng vào bất kỳ loại ứng dụng nào.
WebSocket mới trong HTML5 là một kỹ thuật Ajax ngược. Sockets cho phép các kênh giao tiếp song song hai chiều và hiện được hỗ trợ bởi nhiều trình duyệt (Firefox, Google Chrome và Safari). Các kết nối được mở thông qua các yêu cầu HTTP (HTTP request) được gọi là các ràng buộc Sockets với các tiêu đề đặc biệt.
Kết nối được duy trì để bạn có thể đọc và ghi dữ liệu bằng JavaScript như thể bạn đang sử dụng các socket TCP thuần túy. Dữ liệu được gửi qua giao thức HTTP (thường được sử dụng trong các kỹ thuật Ajax) chứa rất nhiều dữ liệu không cần thiết trong tiêu đề.
Tiêu đề yêu cầu / phản hồi HTTP có kích thước khoảng 871 byte, trong khi Sockets chỉ có 2 byte (sau khi kết nối). Vì vậy, giả sử bạn muốn tạo một ứng dụng trò chơi cho phép 10.000 người chơi đăng nhập đồng thời và gửi và nhận dữ liệu từ máy chủ mỗi giây. Hãy so sánh lượng dữ liệu tiêu đề mà giao thức HTTP và Socket nhập vào 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.
Cách sử dụng Websocket
Chúng ta hãy xem xét chức năng của Websocket và áp dụng chúng vào quy trình làm việc của bạn. Có thể chạy cùng lúc nhiều socket giúp tăng tốc công việc và nâng cao hiệu quả công việc. Sockets được hỗ trợ bởi hầu hết các hệ điều hành như Windows và Linux. Và nó được sử dụng trong nhiều ngôn ngữ lập trình khác nhau.
Sockets giúp lập trình viên kết nối các ứng dụng trong môi trường kết nối Internet để gửi và nhận dữ liệu bằng phương thức TCPIP và UDP.
Hai ứng dụng phải biết thông tin IP và cổng của nhau nếu chúng cần trao đổi dữ liệu. Có nhiều loại socket khác nhau, tùy thuộc vào cách dữ liệu được truyền (giao thức). Phổ biến nhất là TCP và UDP.
Ưu – nhược điểm của Websocket
Về ưu điểm:
WebSockets cung cấp giao tiếp hai chiều mạnh mẽ với độ trễ thấp và tỷ lệ lỗi thấp. Nó không yêu cầu nhiều kết nối như phương pháp bỏ phiếu dài Comet và không có nhược điểm của phát trực tuyến Comet.
API cũng là một thư viện tuyệt vời để xử lý các kết nối lại, hết thời gian chờ, yêu cầu ajax (yêu cầu Ajax), xác nhận và các phương tiện truyền tải tùy chọn khác nhau (Ajax long polling và JSONP polling) trực tiếp mà không cần các lớp bổ sung. Điều này rất đơn giản so với Comet thường yêu cầu.
Về nhược điểm:
Đây là một thông số kỹ thuật mới cho HTML5, vì vậy không phải tất cả các trình duyệt đều hỗ trợ nó. Không có khu vực bắt buộc. Sockets là cổng TCP, không phải là yêu cầu HTTP, vì vậy việc sử dụng các dịch vụ nhận biết yêu cầu như SessionInViewFilter của Hibernate không phải là chuyện nhỏ.
Hibernate là một khung công tác cổ điển cung cấp các bộ lọc xung quanh các yêu cầu HTTP. Bắt đầu một yêu cầu đặt ra các xung đột (bao gồm các giao dịch và ràng buộc JDBC) được liên kết với luồng yêu cầu. Khi yêu cầu này kết thúc, bộ lọc sẽ ngừng cạnh tranh.
Gợi ý cách kết nối WebSocket
Đầu tiên, WebSocket Open Handshake không sử dụng lược đồ http: // hoặc https: // vì nó không tuân theo giao thức HTTP. Thay vào đó, các URI Socket sử dụng giao thức ws: (hoặc wss: với Socket an toàn). Phần còn lại của URI trông giống như một URI HTTP, bao gồm các tham số máy chủ, cổng, đường dẫn và truy vấn.
“ws:” “//” host [ “:” port ] path [ “?” query ]
“wss:” “//” host [ “:” port ] path [ “?” query ]
Kết nối Socket chỉ có thể được thực hiện với các URI tuân theo sơ đồ này. Do đó, khi được trình bày với một URI của lược đồ ws: // (hoặc wss: //), cả máy khách và máy chủ phải tuân theo giao thức WebSocket.
Kết nối Socket được thiết lập bằng cách cập nhật một cặp yêu cầu / phản hồi HTTP. Khi một ứng dụng khách hỗ trợ WebSocket muốn kết nối, nó sẽ gửi một yêu cầu HTTP với các tiêu đề bắt buộc sau:
Connection: Upgrade
Tiêu đề Kết nối thường kiểm soát việc mở các kết nối mạng sau khi giao dịch hoàn tất. Giá trị chung cho tiêu đề này là Keep-Alive. Điều này đảm bảo kết nối liên tục cho các yêu cầu tiếp theo đến cùng một máy chủ. Trong lần bắt tay mở Socket, hãy đặt tiêu đề thành Nâng cấp để chỉ ra rằng kết nối nên được để mở và được sử dụng cho các yêu cầu không phải HTTP.
Websockets: Upgrade
Tiêu đề nâng cấp được máy khách sử dụng để yêu cầu máy chủ chuyển sang giao thức khác trong danh sách theo thứ tự ưu tiên. Trong ví dụ này, socket chỉ ra rằng máy khách đang cố gắng thiết lập kết nối.
Sec-WebSocket-Key: q4xkcO32u266gldTuKaSOw==
Sec-WebSocket-Key là một giá trị có sẵn ngẫu nhiên (nonce) do máy khách tạo ra. Giá trị tiêu đề là giá trị được mã hóa base64 16 byte được tạo ngẫu nhiên
Chỉ định rằng phiên bản Socket được chấp nhận duy nhất là 13. Tất cả các phiên bản khác được liệt kê trong tiêu đề này không hợp lệ.
Sự kết hợp tiêu đề trên tạo ra một yêu cầu HTTP GET từ máy khách tới ws: // URI như sau:
GET ws://example.com:8181/ HTTP/1.1
Host: localhost:8181
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: q4xkcO32u266gldTuKaSOw==
Sau khi gửi yêu cầu ban đầu để mở kết nối Socket, máy khách đợi phản hồi từ máy chủ. Phản hồi từ máy chủ phải chứa mã phản hồi Giao thức chuyển đổi HTTP 101. Phản hồi này chỉ ra rằng máy chủ đang chuyển sang giao thức do máy khách yêu cầu trong tiêu đề yêu cầu nâng cấp. Ngoài ra, máy chủ phải bao gồm tiêu đề HTTP xác thực kết nối được làm mới thành công.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: fA9dggdnMPU79lJgAE3W4TRnyDM=
Connection: Upgrade:
Đảm bảo rằng kết nối đã được upgrade.
Upgrade: websocket
Đảm bảo rằng kết nối đã được upgrade.
Sec-Socket-Accept: fA9dggdnMPU79lJgAE3W4TRnyDM=`
Sec-Socket-Accept là giá trị băm SHA-1 được mã hóa base64. Giá trị này có thể được tạo bằng cách nối Client-Sec-Socket-Key-Nonce với giá trị tĩnh 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 như được định nghĩa trong RFC 6455. Sec-Socket-Key và Sec-Socket-Accept có thể trông hơi phức tạp, nhưng chúng nên có mặt để máy khách và máy chủ biết cái nào hỗ trợ Sockets.
Sau khi máy khách nhận được phản hồi của máy chủ, kết nối Socket sẽ được mở và quá trình truyền dữ liệu bắt đầu.
Với các thông tin mà chúng tôi vừa chia sẻ, hi vọng bạn đã biết được websocket là gì và cách thiết lập như thế nào. Cùng tiếp tục đón đọc nhiều bài viết hữu ích khác của TENTEN nhé!
DỊCH VỤ CLOUD SERVER TỐC ĐỘ XỬ LÝ VƯỢT TRỘI
Các tìm kiếm liên quan đến chủ đề “websocket”
WebSocket là gì | Stomp-websocket |
WebSocket javascript | WebSocket server |
Spring-websocket client | WebSocket example |
WebSocket C# | WebSocket Python |
Bài viết liên quan
Các thành phần của website cá nhân cần phải có trong năm 2022