Hướng dẫn python socket io
Nội dung
1. Socket là gì?"A socket is one endpoint of a two-way communication link between two programs running on the network. A socket is bound to a port number so that the TCP layer can identify the application that data is destined to be sent to" - theo oracle Show Tạm dịch, một socket là một điểm cuối (endpoint) của một liên kết thông tin liên lạc 2 chiều giữa 2 chương trình chạy trên hệ thống mạng. Một socket được liên kết với một cổng (PORT) để tầng TCP có thể định danh ứng dụng nào đã gửi dữ liệu đến. Như vậy, socket được sử dụng cho phép một process (hay program) này nói chuyện với một process (hay program) khác và duy trì kết nối này. 2. Tại sao cần socketThông thường có 2 dạng socket là web socket và unix socket.
Web socket sẽ là đối tượng quan tâm chính của chúng ta ở đây và phần sau của bài viết vậy ... tại sao cần sử dụng socket?
3. Cơ chế hoạt động của socketSocket là thiết lập một kết nối giữa client và server thông qua giao thức TCP/IP hay UDP để truyền và nhận dữ liệu qua internet. Để nói thêm, một điểm cuối (endpoint) được định nghĩa là cặp IP và PORT. Mọi kết nối TCP được xác định duy nhất bởi hai điểm cuối của nó do vậy ta có thể tạo rất nhiều kết nối giữa client và server ( thông thường mỗi máy có hàng chục nghìn cổng kết nối - PORT). Vậy socket sử dụng giao thức TCP/IP hoạt động như thế nào?
Sở dĩ kết nối được duy trì là do PORT đã mở thì sẽ không đóng lại cho đến khi các điều kiện nói ở trên bị vi phạm hoặc client gửi yêu cầu đóng kết nối. Nói dễ hiểu hơn, client thiết lập một kết nối đến server để giao tiếp và nó chỉ việc ngồi nghe (listening) mà không phải gửi request liên tục. Server thấy có dữ liệu mới sẽ kiểm tra xem trạng thái kết nối Keep-Alive, nếu kết nối còn nó sẽ gửi dữ liệu qua cho client. Socket sử dụng giao thức UDP, client và server sẽ không thiết lập kết nối, server chỉ cần biết địa chỉ client và đẩy dữ liệu đến đó mà không cần biết dữ liệu có tới đầy đủ hay không. 4. Phân loại Web socket. Ưu và nhược điểm.Dựa trên giao thức mạng, người ta phân ra làm 2 dạng socket.
Dựa trên giao thức TCP, việc truyền dữ liệu chỉ thực hiện khi client với server đã thiết lập kết nối. Stream socket còn gọi là socket hướng kết nối. -> Ưu điểm : Kết nối cần được xác định rõ ràng nên đảm bảo dữ liệu sẽ được truyền đi có tính tin cậy và toàn vẹn. -> Nhược điểm : Cần đợi client thiết lập kết nối
Dựa trên giao thức UDP, việc truyền dữ liệu không cần thiết lập kết nối. Còn gọi là socket không hướng kết nối. -> Ưu điểm : Do không cần thực hiện kết nối nên giảm thời gian trễ cho các quá trình xác thực, làm tăng tốc độ truyền dữ liệu. -> Nhược điểm : Không tin cậy và không đảm bảo dữ liệu toàn vẹn khi gửi tới client. Trong thực tế, Datagram socket thường sử dụng để đẩy đi dữ liệu tin nhắn chẳng hạn như chat game, server cứ đẩy liên tục các tin nhắn mới mà không cần quan tâm client đã nhận được hay chưa, đơn giản là nó làm tăng tốc độ xử lý trong game. 5. Xây dựng một giao tiếp socket bằng pythonTrong ví dụ dưới đây ta sẽ sử dụng thư viện socket của python, cùng tìm hiểu một số phương thức nhé:
Tìm hiểu thêm về các phương thức tại socket docs Dưới đây là code demo
Tạm kếtViệc tăng tốc độ kết nối và tối ưu tài nguyên sử dụng là một nhiệm vụ rất quan trọng trong xây dựng một hệ thống máy tính. Một website hay một mobile app có tốc độ tải mượt sẽ làm tăng trải nghiệm khách hàng sẽ thu hút và giữ chân khách hàng nhiều hơn là một hệ thống xử lý chậm chạp. Socket là một công nghệ hoàn hảo cho nhiệm vụ này. Trên đây là những kiến thức cần biết về socket và ví dụ với python. Demo này chỉ mang tính chất thử nghiệm kết nối, tính hiệu quả chỉ thể hiện trong thực tế. Nếu có góp ý hay câu hỏi gì các bạn hãy để lại bên dưới comment và nếu cảm thấy bài viết này hữu ích hãy giúp mình một đánh giá 5 sao. Thank for reading! [References]
|