Chào mừng các bạn đã bước lên nấc thang nữa của lập trình mạng hiện đại! Việc chinh phục WebSockets ngay sau khi làm chủ Socket truyền thống là một bước đi xuất sắc.
Giải thích vì sao chúng ta cần WebSockets:
*"Cái bộ đàm Socket (TCP) ở Bài 2 và Bài 3 rất mạnh, nhưng nó là vũ khí của thế giới phần mềm chạy ngầm. Khi các ta lướt web bằng Google Chrome hoặc Safari, trình duyệt web lại nói ngôn ngữ khác tên là HTTP.
Với HTTP thông thường, ta giống như người đi mua hàng: Mỗi lần muốn biết có tin nhắn mới không, chúng ta lại phải bấm F5 hoặc gửi một câu hỏi: 'Có tin mới chưa?'. Nếu 1 giây con hỏi 1 lần, máy chủ sẽ bị quá tải !
Để giải quyết, các kỹ sư vĩ đại đã tạo ra WebSockets — một kỹ thuật giúp biến trang web thông thường thành một đường ống hai chiều vĩnh viễn. Máy chủ và trình duyệt web có thể chủ động 'đẩy' dữ liệu qua lại cho nhau ngay lập tức mà không cần ai phải bấm F5 cả!"*
Dưới đây là thiết kế lộ trình khóa học: "Phù Thủy Mạng Web: Kích Hoạt Đường Ống Siêu Tốc WebSockets" được minh họa bằng Python ở phía máy chủ (Backend) và trang Web HTML/JavaScript ở phía khách (Frontend)!
Mục tiêu: Hiểu cách một trang web nâng cấp từ kết nối HTTP thông thường lên WebSockets.
Cách giảng trực quan: > *"Đầu tiên, máy khách (Trình duyệt) sẽ gửi một bức thư HTTP bình thường đến máy chủ để chào hỏi. Nhưng trong thư có kèm một mật mã: 'Tôi muốn nâng cấp lên WebSockets!'.
Nếu máy chủ đồng ý, hai bên sẽ làm một thủ tục gọi là Handshake (Bắt tay). Ngay sau cú bắt tay đó, cánh cửa HTTP khép lại, và một đường ống WebSocket siêu tốc được mở ra vĩnh viễn!"*
Sản phẩm thực hành: Cài đặt thư viện websockets của Python. Viết một Server Python đứng im đợi "bắt tay" và một trang web HTML tí hon tự động mở kết nối WebSocket khi vừa bật lên.
Mục tiêu: Làm quen với tư duy lập trình theo sự kiện (Event) của WebSockets.
Khái niệm then chốt: Ở bài học Socket cũ, chúng ta dùng Luồng (Thread) để giải quyết việc đơ máy khi đợi lệnh .recv(). Trong WebSockets, ngôn ngữ JavaScript trên trình duyệt và Python tân tiến sử dụng cơ chế Sự kiện (Event):
onopen: Chuyện gì xảy ra khi đường ống vừa thông suốt?
onmessage: Chuyện gì xảy ra khi tự nhiên có một bưu kiện JSON từ trên trời bay về?
onclose: Chuyện gì xảy ra khi đứt mạng?
Sản phẩm thực hành: Thiết kế giao diện trang web có một chiếc đèn tròn. Khi Server Python đổi trạng thái, nó tự "đẩy" tín hiệu xuống khiến chiếc đèn trên trang web tự động đổi từ màu Đỏ sang Xanh ngay lập tức mà không cần tải lại trang.
Mục tiêu: Học cách máy chủ gửi một bưu kiện cho TẤT CẢ các máy con cùng một lúc.
Bài toán thực tế: Hãy tưởng tượng xưởng dừa của ba có một bảng hiển thị giá dừa trực tuyến. Có 10 khách hàng cùng mở điện thoại lên xem. Khi ba thay đổi giá dừa từ 15.000đ xuống 14.000đ, làm sao để màn hình của cả 10 người cùng nhảy số một lúc?
Giải pháp: Máy chủ WebSocket sẽ lưu giữ một Danh sách (List) tất cả các kết nối đang mở. Mỗi khi có dữ liệu mới, nó sẽ chạy vòng lặp và phát thanh (Broadcast) bưu kiện JSON tới từng người.
Sản phẩm thực hành: Tạo một "Sàn giao dịch giá quả dừa nhí". Server Python cứ 2 giây lại tự tạo ra một mức giá dừa ngẫu nhiên và đẩy xuống. Ba con mở 3 tab trình duyệt Chrome khác nhau lên và cùng nhìn thấy giá dừa nhảy múa đồng bộ!
Mục tiêu: Tổng hợp toàn bộ kiến thức để làm một ứng dụng Chat như Zalo chạy ngay trên trình duyệt lướt web.
Sự kết hợp hoàn hảo:
Backend (Python): Dùng WebSockets để quản lý các phòng chat, nhận tin nhắn từ người này và chuyển tiếp (forward) sang người kia.
Frontend (HTML/CSS/JavaScript): Thiết kế một giao diện bong bóng chat đẹp mắt (bằng HTML/CSS). Không còn lỗi lệch dòng chữ của Terminal nữa, vì chữ gõ nằm riêng ở ô nhập liệu, còn tin nhắn nhận về sẽ tự động đính vào danh sách cuộn lên phía trên!
Hành trang tương lai: Đây chính là lõi công nghệ của các ứng dụng Game Online, ứng dụng chứng khoán, hay ứng dụng gọi xe công nghệ ngoài đời thực.