Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python

Giới thiệu về Lập trình Mạng trong Python

by
Difficulty:AdvancedLength:ShortLanguages:

Vietnamese (Tiếng Việt) translation by Dai Phong (you can also view the original English article)

Giới thiệu về Lập trình Mạng trong Python

Bài hướng dẫn này sẽ giới thiệu về socket trong Python và cách sử dụng mô đun socket để xây dựng các máy chủ và máy khách HTTP trong Python. Nó cũng sẽ khái quát Tornado, một thư viện kết nối mạng trong Python, lý tưởng cho long polling, WebSocket và các ứng dụng khác yêu cầu kết nối lâu dài với mỗi người dùng.

Socket là gì?

Một socket là một liên kết giữa hai ứng dụng có thể giao tiếp với nhau (hoặc cục bộ trên một máy đơn lẻ hoặc từ xa giữa hai máy ở các vị trí riêng biệt).

Về cơ bản, socket hoạt động như một liên kết giao tiếp giữa hai thực thể, tức là máy chủ và máy khách. Một máy chủ sẽ trả về thông tin được yêu cầu bởi một máy khách. Ví dụ, khi bạn truy cập trang này, trình duyệt tạo một socket và kết nối với máy chủ.

Mô-đun socket

Để tạo một socket, bạn sử dụng hàm socket.socket() và cú pháp đơn giản như sau:

Đây là mô tả của các đối số:

  • socket_family: Đại diện cho họ địa chỉ (và giao thức). Nó có thể là AF_UNIX hoặc AF_INET.
  • socket_type: Đại diện cho loại socket và có thể là SOCK_STREAM hoặc SOCK_DGRAM.
  • protocol: Đây là một đối số tùy chọn, và nó thường mặc định là 0.

Sau khi lấy đối tượng socket, bạn có thể tạo một máy chủ hoặc máy khách theo ý mình bằng cách sử dụng các phương thức có sẵn trong mô đun socket.

Tạo một máy khách đơn giản

Trước khi bắt đầu, chúng ta hãy tìm hiểu các phương thức socket của client có sẵn trong Python.

  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • s.connect(): Khởi tạo một kết nối máy chủ TCP.

Để tạo một socket mới, trước tiên bạn import phương thức socket của lớp socket.

Tiếp theo, chúng ta sẽ tạo một socket stream (TCP) như sau:

Tham số AF_INET cho biết bạn đang yêu cầu một socket Internet Protocol (IP), cụ thể là IPv4. Tham số thứ hai là transport protocol type SOCK_STREAM cho các socket TCP. Ngoài ra, bạn cũng có thể tạo một socket IPv6 bằng cách chỉ định tham số AF_INET6 của socket.

Chỉ định máy chủ.

Chỉ định cổng mà chúng ta muốn liên lạc.

Kết nối socket tới cổng nơi máy chủ đang lắng nghe.

Điều quan trọng cần lưu ý là máy chủ và cổng phải là một tuple.

Gửi yêu cầu dữ liệu đến máy chủ:

Nhận phản hồi từ máy chủ:

Để đóng một kết nối socket, bạn sử dụng phương thức close:

Dưới đây là code đầy đủ cho Client/Server.

Xây dựng một máy chủ đơn giản

Bây giờ chúng ta hãy tìm hiểu một máy chủ Python đơn giản. Sau đây là các phương thức máy chủ của socket có sẵn trong Python.

  • s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  • s.bind(): Ràng buộc địa chỉ (tên máy chủ, số cổng) vào socket.
  • s.listen(): Thiết lập và khởi động TCP listener.
  • s.accept(): Chấp nhận kết nối TCP client.

Chúng ta sẽ làm theo các bước sau:

  • Tạo một socket.
  • Ràng buộc socket với một cổng.
  • Bắt đầu chấp nhận các kết nối trên socket.

Đây là chương trình máy chủ.

Máy chủ hiện đã sẵn sàng cho các kết nối đến.

Bây giờ hãy chạy chương trình máy khách và máy chủ trong các cửa sổ terminal riêng biệt, để chúng có thể giao tiếp với nhau.

Đầu ra Máy chủ

Đầu ra Máy khách

Framework Tornado

Framework Tornado là một trong các thư viện có sẵn cho lập trình mạng bằng Python. Trong phần này, chúng ta sẽ thảo luận về thư viện này và cách sử dụng nó để xây dựng WebSocket.

Tornado là một web framework bằng Python và thư viện kết nối mạng không đồng bộ. Tornado sử dụng I/O mạng không chặn, và do đó có khả năng mở rộng tới hàng chục nghìn kết nối mở. Đặc điểm này làm cho nó trở nên lý tưởng cho kết nối long-polling, WebSocket và các ứng dụng khác yêu cầu kết nối lâu dài với mỗi người dùng.

Hãy tạo một WebSocket Tornado đơn giản:

Trong đoạn code trên:

  • Chúng ta định nghĩa lớp ApplicationHandler, đóng vai trò là trình xử lý cho một yêu cầu và trả về một phản hồi bằng cách sử dụng phương thức write().
  • Phương thức main là entry cho chương trình.
  • tornado.web.Application tạo cơ sở cho ứng dụng web và nhận một bộ các trình xử lý, ví dụ, ApplicationHandler.
  • Ứng dụng lắng nghe trên cổng 5000 và một ứng dụng khách có thể giao tiếp với ứng dụng này bằng cách sử dụng cùng một cổng.
  • tornado.ioloop.IOLoop.instance().start() tạo ra một luồng không chặn cho một ứng dụng.

Nếu chúng ta chạy ứng dụng, chúng ta sẽ nhận được kết quả như trong hình minh hoạ bên dưới.

The results of running our application

Phần kết luận

Bây giờ bạn đã nắm được những kiến thức cơ bản về lập trình socket trong Python và cách bạn có thể xây dựng một máy chủ và máy khách đơn giản. Hãy thử bằng cách xây dựng ứng dụng trò chuyện của riêng bạn. Để tìm hiểu thêm, hãy truy cập tài liệu hướng dẫn Python.

Ngoài ra, đừng ngần ngại xem qua những gì chúng tôi đang dành để bán và dành cho học tập trên Envato Market, và đừng ngần ngại hỏi bất kỳ câu hỏi nào và cung cấp phản hồi có giá trị của bạn bằng cách sử dụng phần comment ở bên dưới.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.