2011-06-30 12 views
10

cảm ơn những câu trả lời thú vị từ trước tới giờ. Trong ánh sáng của câu trả lời cho biết tôi đã thay đổi câu hỏi của tôi một chút.(Có) TÍNH NĂNG HIỆU SUẤT của máy chủ python trên đối tượng ổ cắm thông thường không?

đoán những gì tôi thực sự cần biết, là socketserver trái ngược với thư viện ổ cắm thẳng lên được thiết kế để xử lý cả thời gian trễ và căng thẳng, tức là có cơ chế hoặc tính năng bổ sung không. một "máy chủ", hoặc có dễ sử dụng hơn không?

mọi người dường như đang đề xuất socketserver nhưng tôi vẫn chưa hoàn toàn rõ ràng tại sao, ngược lại với socket.

cảm ơn !!!

tôi đã xây dựng một số chương trình máy chủ trong python dựa trên các ổ cắm tiêu chuẩn thư viện http://docs.python.org/library/socket.html

tôi đã nhận thấy rằng họ có vẻ làm việc tốt ngoại trừ việc không tải họ có xu hướng đi ngủ sau một thời gian. Tôi đoán điều này có thể không phải là là một vấn đề trong sản xuất (không nghi ngờ sẽ có rất nhiều vấn đề khác) nhưng tôi sẽ muốn biết nếu tôi là sử dụng mã đúng cho công việc tại đây.

Nhìn xung quanh, tôi thấy python mà cũng cung cấp một thư viện SocketServer - http://docs.python.org/library/socketserver.html

Các ổ cắm thư viện cung cấp khả năng nghe cho nhiều kết nối, thường lên đến 5.

Theo các máy chủ socketserver, các dịch vụ của nó đồng bộ, tức là chặn, nhưng có thể hỗ trợ hành vi không đồng bộ thông qua luồng. Tôi đã nhận thấy có khả năng duy trì hàng đợi yêu cầu, với giá trị mặc định là tối đa 5 yêu cầu ... do đó có thể không có nhiều khác biệt ở đó.

Tôi cũng đã đọc Twisted chạy ổ cắm dưới mui xe. Mặc dù tôi không muốn tham gia một con thú với kích thước của Xoắn trừ khi nó sẽ là đáng giá.

vì vậy câu hỏi của tôi là, là socketserver mạnh mẽ hơn socket? Nếu có, tại sao?

(Và làm thế nào để bạn biết?)

tình cờ, được xây dựng trên SocketServer đầu ổ cắm python hay là nó hoàn toàn tách biệt?

cuối cùng, làm tiền thưởng nếu có ai biết những gì người ta có thể làm sai sao cho ổ cắm tiêu chuẩn 'ngủ' xin vui lòng cảm thấy tự do để kêu vang vào điều đó.

Ồ, và tôi đang nói python 2.x thay vì so với 3.x ở đây nếu điều đó tạo ra sự khác biệt .

cảm ơn mọi người!

JSH


Vâng, tôi không có một câu trả lời kỹ thuật nhưng tôi đã thực hiện SocketServer theo khuyến nghị của folks' và nó chắc chắn đáng tin cậy hơn IS. Nếu có ai từng đưa ra lời giải thích cấp thấp, hãy cho tôi biết ... cảm ơn!

+3

Đó là một khung nhỏ. Twisted là một khung công tác đầy đủ. Có, chúng được xây dựng trên đầu trang của mỗi khác. Mô-đun 'socket' trong Python chỉ là một trình bao bọc xung quanh giao diện socket gốc của hệ điều hành (WinSock, BSD Socket, vv). Bất kỳ ứng dụng mạng nào, có thể là trong Python hoặc C++, rất có thể sẽ sử dụng giao diện này. Và vì 'socket' của Python là một trình bao bọc xung quanh, cả' socketserver' và Twisted đều sử dụng nó. – Santa

+1

'socketserver' là đồng bộ, trừ khi bạn kết hợp cả hai khả năng xử lý nhánh hoặc sợi chỉ. Xoắn là không đồng bộ, nhưng thường xử lý nó bằng cách sử dụng một cái gì đó như 'select' hoặc' epoll', nơi bạn không cho phép các ổ cắm chặn và sau đó xử lý các ổ cắm khi chúng sẵn sàng để được viết hoặc đọc từ đó. Tôi tin rằng có một tùy chọn để sử dụng luồng trong Twisted, nhưng nó dễ dàng hơn để sử dụng nó mà không cần luồng. Vì vậy, tôi thực sự nghi ngờ rằng Twisted sử dụng 'socketserver'. –

Trả lời

9

Mô-đun ổ cắm là mô-đun cấp rất thấp để gửi và nhận gói. Như đã nói trong tài liệu, nó "cung cấp quyền truy cập vào giao diện socket BSD".

Nếu bạn muốn một cái gì đó phức tạp hơn, có "socketserver" mà sẽ chăm sóc các chi tiết gory cho bạn, nhưng nó vẫn còn tương đối thấp cấp.

Trên hết, bạn có thể tìm thấy máy chủ HTTP, có hoặc không có CGI, máy chủ XML-RPC, v.v. Đây là các khung , thường có nghĩa là mã của chúng gọi mã của bạn. Nó làm cho mọi thứ đơn giản hơn vì bạn chỉ cần điền vào một số "khoảng trống" để có một máy chủ làm việc đầy đủ, nhưng nó cũng có nghĩa là bạn có một chút ít kiểm soát hơn những gì nó làm.

Nếu bạn chỉ cần các tính năng của socketserver, tôi có thể đi với nó, trừ khi bạn muốn phát minh lại bánh xe vì lý do nào đó (và luôn có lý do tốt để thiết kế bánh xe mới, ví dụ để hiểu nó hoạt động như thế nào).

+1

+1 cho bit cuối cùng đó! –

Các vấn đề liên quan