WebSocket là một giao thức chuẩn để truyền dữ liệu hai chiều giữa máy khách và máy chủ. Giao thức WebSockets không chạy trên HTTP, thay vào đó, nó là một triển khai riêng biệt trên TCP Show Tại sao nên sử dụng WebSockets?Kết nối WebSocket cho phép giao tiếp song công hoàn toàn giữa máy khách và máy chủ để một trong hai bên có thể đẩy dữ liệu sang bên kia thông qua kết nối đã thiết lập. Lý do tại sao WebSockets, cùng với các công nghệ liên quan của sự kiện do máy chủ gửi (SSE) và kênh dữ liệu WebRTC, quan trọng là HTTP không có nghĩa là giữ kết nối mở cho máy chủ để thường xuyên đẩy dữ liệu tới trình duyệt web. Trước đây, hầu hết các ứng dụng web sẽ triển khai long polling thông qua các yêu cầu JavaScript và XML (AJAX) không đồng bộ thường xuyên như trong sơ đồ bên dưới Đẩy máy chủ hiệu quả hơn và có thể mở rộng hơn so với bỏ phiếu dài vì trình duyệt web không phải liên tục yêu cầu cập nhật thông qua luồng yêu cầu AJAX Trong khi sơ đồ trên cho thấy một máy chủ đẩy dữ liệu đến máy khách, WebSockets là một kết nối song công hoàn toàn nên máy khách cũng có thể đẩy dữ liệu đến máy chủ như trong sơ đồ bên dưới Cách tiếp cận WebSockets dành cho các bản cập nhật do máy chủ và máy khách thúc đẩy hoạt động tốt đối với một số loại ứng dụng web nhất định, chẳng hạn như phòng trò chuyện, đó là lý do tại sao đó thường là một ứng dụng ví dụ cho thư viện WebSocket Triển khai WebSocketsCả trình duyệt web và máy chủ phải triển khai giao thức WebSockets để thiết lập và duy trì kết nối. Có ý nghĩa quan trọng đối với các máy chủ vì các kết nối WebSockets tồn tại lâu dài, không giống như các kết nối HTTP thông thường Máy chủ dựa trên đa luồng hoặc đa quy trình không thể mở rộng quy mô phù hợp cho WebSockets vì nó được thiết kế để mở kết nối, xử lý yêu cầu nhanh nhất có thể và sau đó đóng kết nối. Một máy chủ không đồng bộ như Tornado hoặc khỉ Green Unicorn được vá bằng gevent là cần thiết cho bất kỳ triển khai phía máy chủ WebSockets thực tế nào Về phía máy khách, không cần thiết phải sử dụng thư viện JavaScript cho WebSockets. Các trình duyệt web triển khai WebSockets sẽ hiển thị tất cả chức năng phía máy khách cần thiết thông qua đối tượng WebSockets Tuy nhiên, thư viện trình bao bọc JavaScript có thể giúp cuộc sống của nhà phát triển trở nên dễ dàng hơn bằng cách triển khai sự xuống cấp nhẹ nhàng (thường quay trở lại quá trình bỏ phiếu dài khi WebSockets không được hỗ trợ) và bằng cách cung cấp một trình bao bọc xung quanh các yêu cầu WebSocket dành riêng cho trình duyệt. Các ví dụ về thư viện máy khách JavaScript và triển khai Python được hiển thị trong phần bên dưới Ủy quyền Nginx WebSocketNginx chính thức hỗ trợ WebSocket proxy kể từ phiên bản 1. 3. Tuy nhiên, bạn phải định cấu hình các tiêu đề Nâng cấp và Kết nối để đảm bảo các yêu cầu được chuyển qua Nginx đến máy chủ WSGI của bạn. Có thể khó thiết lập điều này lần đầu tiên Dưới đây là các cài đặt cấu hình tôi sử dụng trong tệp Nginx của mình như một phần của proxy WebSockets của tôi # this is where my WSGI server sits answering only on localhost # usually this is Gunicorn monkey patched with gevent upstream app_server_wsgiapp { server localhost:5000 fail_timeout=0; } server { # typical web server configuration goes here # this section is specific to the WebSockets proxying location /socket.io { proxy_pass http://app_server_wsgiapp/socket.io; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 600; } } Lưu ý nếu bạn gặp phải bất kỳ sự cố nào với cấu hình ví dụ trên, bạn sẽ muốn tìm hiểu tài liệu mô-đun proxy HTTP chính thức Các tài nguyên sau đây cũng hữu ích để thiết lập cấu hình đúng cách Triển khai Python WebSocketsCác dự án sau triển khai WebSockets trong Python hoặc cung cấp mã ví dụ mà bạn có thể làm theo để sử dụng WebSockets trong các dự án của riêng mình
Thư viện máy khách JavaScriptJavaScript được sử dụng để tạo phía máy khách của kết nối WebSocket vì máy khách thường là một trình duyệt web. Mặc dù bạn không cần một trong các thư viện phía máy khách này để sử dụng WebSockets, nhưng chúng rất hữu ích để giảm thiểu số lượng mã soạn sẵn để thiết lập và xử lý các kết nối của bạn
Mã ví dụ cho WebSockets trong PythonCó rất nhiều triển khai dựa trên Python cho WebSockets, vì vậy đôi khi, việc kiểm tra một ví dụ là dễ dàng nhất để bạn có thể xây dựng thứ gì đó cho dự án của riêng mình
Tài nguyên WebSockets dành riêng cho Python
Tài nguyên WebSockets chungWebSockets hỗ trợ nhiều trình duyệt và do đó, nhiều khung web trên tất cả các ngôn ngữ lập trình chính đều có thư viện để tạo kết nối WebSockets dễ dàng hơn. Các tài nguyên sau đây là các hướng dẫn và hướng dẫn chung cung cấp ngữ cảnh cho giao thức mà không đi sâu vào cách sử dụng WebSockets trong Python |