Python là ngôn ngữ cho phép chúng ta làm việc ở hai cấp độ truy cập của dịch vụ mạng. Trong bài viết này, Học viện Agile sẽ chia sẻ đến các bạn những kiến thức cơ bản về lập trình socket Python.
Giữa hai chương trình chạy trên mạng cần có liên kết hai chiều để kết nối 2 ứng dụng với nhau. Điểm cuối, điểm đầu nút của liên kết song hướng (endpoint) được gọi là socket. Cụ thể, khi bạn viết một ứng dụng và cần tương tác với ứng dụng khác, chúng ta sẽ dựa vào mô hình client/server:
Để yêu cầu được server thực hiện điều gì đó, client phải có khả năng kết nối đến server. Cơ chế kết nối này được trừu tượng hóa gọi là socket, tương tự như việc cắm dây điện vào ổ cắm. Server được coi là ổ cắm, Client là phích cắm. Một ổ cắm có thể cắm nhiều phích điện, tương tự việc một Server có thể kết nối và phục vụ cho nhiều Client.
Khái niệm | Miêu tả |
Domain (vùng) | Vùng dùng xác định hạ tầng mạng, nơi diễn ra giao tiếp của socket. Vùng giao tiếp thông dụng nhất hiện nay là AF_INET. AF_UNIX chỉ dùng trong giao tiếp cục bộ nhưng trong thực tế ít được sử dụng. Ngoài ra chúng ta có AF_IPX, AF_ISO và AF_NS |
Type (kiểu) | Với mỗi vùng của domain, bạn có nhiều cách để giao tiếp: SOCK_DGRAM (giao tiếp một chiều) và SOCK_STREAM (giao tiếp 2 chiều) |
Protocol (giao thức) | Là cách quy ước gửi nhận dữ liệu giữa hai hay nhiều máy tính trong mạng. Mặc định là 0, sử dụng để nhận diện một biến thể của giao thức bên trong domain |
Mô tả mô hình
Trong Python, chúng ta sử dụng hàm socket.socket() trong Socket Module với cú pháp chung:
Chi tiết tham số:
socket_family (Address Family, hay còn gọi là kiểu thiết lập kết nối) |
|
socket_type (cách thiết lập giao thức) |
|
Ngoài ra, chúng ta còn có thêm một số phương thức:
Phương thức | Ý nghĩa |
s.bind((HOST, PORT)) | Đăng ký tên, gán địa chỉ vào socket |
s.close() | Đóng kết nối |
s.listen(2) | Socket lắng nghe tới >= 2 kết nối |
data = client.recv(1024) | Nhận dữ liệu |
client, addr = s.accept() | Client gõ cửa, server chấp nhận và tạo ra một socket mới. Client và server đã có thể nhận và truyền dữ liệu. |
str_data = data.decode(“utf8”) | Phân tích dữ liệu đã nhận |
s.sendall(bytes(msg, “utf8”)) | Gửi dữ liệu trên Steam Socket (thông qua giao thức TCP) |
Lập trình Socket trên Server
Cách xử lý tuần tự phía trên sẽ không phù hợp khi có nhiều Client cùng kết nối đến một Server. Để xử lý đồng thời kết nối của nhiều Client, bạn có thể sử dụng lệnh fork() để tạo trình con mới hoạt động độc lập với Server và phục vụ Client theo cách riêng của nó. Server hoàn toàn tự do để tiếp nhận kết nối khác.
Một cách nữa để xử lý kết nối đồng thời nhiều Client là sử dụng cách tạo tuyến thread. Lưu ý: tuyến ít khi được dùng trong UNIX và LINUX.
Hy vọng rằng bài viết đã đem đến thông tin bổ ích cho các bạn về lập trình socket Python. Ngoài những hiểu biết về ngôn ngữ lập trình, để có tư duy phát triển phần mềm linh hoạt, rút ngắn thời gian đưa sản phẩm đến tay người dùng, các bạn nên tham khảo thêm về Agile Software Development – phương pháp phát triển phần mềm linh hoạt. Nhờ khả năng vận hành tốt, đáp ứng đa dạng nhu cầu, đem lại hiệu quả và năng suất cao, Agile đang là sự lựa chọn hàng đầu của khách hàng, nhà phát triển, công ty phần mềm.
Để giúp nhà quản lý dự án kiểm soát tiến độ, chi phí và tăng khả năng thích ứng với thay đổi hiệu quả, Học viện Agile đã xây dựng khóa đào tạo Quản trị dự án Agile (Agile Project Management) với sự dẫn dắt của các giảng viên giàu kinh nghiệm.
Khóa học này được xây dựng dựa trên khung kiến thức PMI-ACP của Project Management Institute, Scrum Framework trong quản trị dự án, cung cấp kiến thức về quản trị dự án theo Agile một cách bài bản, hệ thống, cùng với đó là các phương pháp và công cụ thực hành giúp triển khai dự án hiệu quả và tối ưu chi phí.
Khóa học được thiết kế dành cho:
Khóa học sẽ giúp bạn:
Bài viết liên quan:
Bạn đã đăng ký thành công
Xin cảm ơn bạn đã đăng ký nhận tư vấn
Xin cảm ơn bạn đã đăng ký
Mời bạn kiểm tra Email để tải tài liệu.