Ổ cắm Sock_stream trong Python là gì?
Ổ cắm mạng là điểm cuối của giao tiếp liên quá trình qua mạng máy tính. Thư viện chuẩn Python có một mô-đun tên là Để tạo socket, có một hàm tên là 0 hoặc 1 cho family và 3 cho 4Đây là một ví dụ về socket Python
Nó trả về một đối tượng ổ cắm có các phương thức chính sau
5, 6 và 7 dành riêng cho ổ cắm máy chủ. 8 dành riêng cho ổ cắm máy khách. 9 và 0 chung cho cả hai loại. Đây là một ví dụ về máy chủ Echo từ tài liệu
Ở đây chúng tôi tạo một ổ cắm máy chủ, liên kết nó với một cổng localhost và 50000 và bắt đầu lắng nghe các kết nối đến. Để chấp nhận một kết nối đến, chúng tôi gọi phương thức 7 sẽ chặn cho đến khi một máy khách mới kết nối. Khi điều này xảy ra, nó sẽ tạo một ổ cắm mới và trả về cùng với địa chỉ của máy khách. Sau đó, trong một chu kỳ vô hạn, nó đọc dữ liệu từ ổ cắm theo lô 1024 byte bằng cách sử dụng phương thức 0 cho đến khi nó trả về một chuỗi rỗng. Sau đó, nó sẽ gửi lại tất cả dữ liệu đến bằng một phương thức thuận tiện là 9 mà bên trong liên tục gọi 9. Và sau đó, nó chỉ cần đóng kết nối của máy khách. Ví dụ này chỉ có thể phục vụ một kết nối đến vì nó không gọi 7 trong một chu kỳMã phía máy khách trông đơn giản hơn
Ở đây thay vì 5 và 6, nó chỉ gọi 8 và ngay lập tức gửi dữ liệu đến máy chủ. Sau đó, nó nhận lại 1024 byte, đóng ổ cắm và in dữ liệu đã nhậnTất cả các phương pháp ổ cắm đang chặn. Ví dụ, khi nó đọc hoặc ghi từ một ổ cắm, chương trình không thể làm gì khác. Một giải pháp khả thi là ủy quyền làm việc với khách hàng để tách các chủ đề. Tuy nhiên, việc tạo các luồng và chuyển ngữ cảnh giữa chúng không thực sự là một hoạt động rẻ tiền. Để giải quyết vấn đề này, có một cách gọi là cách làm việc không đồng bộ với socket. Ý tưởng chính là ủy thác việc duy trì trạng thái của ổ cắm cho một hệ điều hành và để nó thông báo cho chương trình khi có thứ gì đó cần đọc từ ổ cắm hoặc khi nó sẵn sàng để ghi. Có rất nhiều giao diện cho các hệ điều hành khác nhau
Tất cả chúng đều giống nhau, vì vậy hãy tạo một máy chủ bằng Python chọn. Đây là một ví dụ về Python 5
Như bạn có thể thấy, có nhiều mã hơn trong máy chủ Echo đang chặn. Điều đó chủ yếu là do chúng tôi phải duy trì một tập hợp hàng đợi cho các danh sách ổ cắm khác nhau, tôi. e. viết, đọc và một danh sách riêng cho các ổ cắm bị lỗi Tạo ổ cắm máy chủ trông giống nhau ngoại trừ một dòng. 6. Điều này được thực hiện để làm cho ổ cắm không bị chặn. Máy chủ này cao cấp hơn vì nó có thể phục vụ nhiều hơn một máy khách. Điểm chính là ở 7 ổ cắm
Ở đây, chúng tôi gọi 8 để yêu cầu HĐH kiểm tra các ổ cắm đã cho xem chúng đã sẵn sàng để viết, đọc hay có một số ngoại lệ tương ứng. Đó là lý do tại sao nó vượt qua ba danh sách ổ cắm để chỉ định ổ cắm nào được cho là có thể ghi, có thể đọc và ổ cắm nào cần được kiểm tra lỗi. Cuộc gọi này sẽ chặn chương trình (trừ khi đối số hết thời gian chờ được thông qua) cho đến khi một số ổ cắm được thông qua sẵn sàng. Tại thời điểm này, cuộc gọi sẽ trả về ba danh sách có ổ cắm cho các hoạt động được chỉ địnhSau đó, nó tuần tự lặp lại các danh sách đó và nếu có ổ cắm trong đó, nó sẽ thực hiện các hoạt động tương ứng. Khi có ổ cắm máy chủ trong 9, điều đó có nghĩa là một khách hàng mới đã đến. Do đó, nó gọi 7, thêm một ổ cắm được trả về vào 9 và thêm một 2 cho các tin nhắn đến sẽ được gửi lại. Nếu có một ổ cắm khác trong đầu vào, thì một số tin nhắn đã đến và sẵn sàng để đọc để nó đọc chúng và đặt chúng vào hàng đợi tương ứngĐối với các ổ cắm có thể ghi, nó sẽ nhận các tin nhắn đang chờ xử lý (nếu có) và ghi chúng vào ổ cắm. Nếu có bất kỳ lỗi nào trong ổ cắm, nó sẽ xóa ổ cắm khỏi danh sách Đây là cách ổ cắm hoạt động ở cấp độ thấp hơn. Tuy nhiên, trong hầu hết các trường hợp, không cần triển khai logic ở mức thấp như vậy. Bạn nên sử dụng một số trừu tượng cấp cao hơn như Twisted, Tornado hoặc ZeroMQ, tùy thuộc vào tình huống Tìm hiểu cách tích hợp máy chủ WebSocket được viết bằng aiohttp vào dự án Django hiện có trong bài viết của chúng tôi. Hoặc học cách viết một cuộc trò chuyện đơn giản Việc sử dụng ổ cắm trong Python là gì?Máy chủ ổ cắm Python
. hàm gethostname(). Nên sử dụng địa chỉ cổng trên 1024 vì số cổng nhỏ hơn 1024 được dành riêng cho giao thức internet tiêu chuẩn. Xem mã ví dụ máy chủ ổ cắm python bên dưới, các nhận xét sẽ giúp bạn hiểu mã
Làm cách nào để gửi dữ liệu bằng socket trong Python?Ví dụ – Máy khách dựa trên TCP. . clientSocket = ổ cắm. ổ cắm (ổ cắm. AF_INET, ổ cắm. SOCK_STREAM); . clientSocket. kết nối(("127. 0. 0. 1",9090)); # Gửi dữ liệu đến máy chủ. dữ liệu = "Xin chào máy chủ. "; clientSocket. gửi dữ liệu. mã hóa()); dataFromServer = clientSocket. recv(1024); |