2010-06-08 34 views
6

Ứng dụng dành cho máy tính để bàn sẽ khởi động máy chủ web khi khởi chạy và nên tắt nó khi đóng.Cách được khuyến nghị để chạy máy chủ web nhúng trong ứng dụng dành cho máy tính để bàn (nói máy chủ wsgi với pyqt)

Giả sử rằng máy tính để bàn là khách hàng duy nhất được phép kết nối với máy chủ web, cách tốt nhất để viết điều này là gì?

Cả máy chủ web và máy tính để bàn đều chạy trong vòng lặp chặn của riêng chúng. Vì vậy, tôi có nên sử dụng các chủ đề hoặc đa xử lý?

Trả lời

6

Sử dụng một cái gì đó như CherryPy hoặc paste.httpserver. Bạn có thể sử dụng máy chủ của wsgiref, và nó thường hoạt động ổn định cục bộ, nhưng nếu bạn đang làm Ajax, tính chất đơn luồng của wsgiref có thể gây ra một số kết quả kỳ lạ, hoặc nếu bạn làm một yêu cầu con bạn sẽ nhận được một điều kiện chủng tộc. Nhưng đối với hầu hết các trường hợp, nó sẽ ổn thôi. Nó có thể hữu ích cho bạn không có máy chủ được nhúng luồng (cả CherryPy và paste.httpserver được tạo luồng), trong trường hợp đó wsgiref sẽ hữu ích (tất cả các yêu cầu sẽ chạy từ cùng một luồng).

Lưu ý rằng nếu bạn sử dụng CherryPy hoặc paste.httpserver, tất cả các yêu cầu sẽ tự động xảy ra trong subthreads (những gói làm thread sinh ra cho bạn), và có thể bạn sẽ không thể trực tiếp chạm vào mã GUI từ mã web của bạn (vì mã GUI thường không thích xử lý bởi các luồng). Đối với bất kỳ khối mã máy chủ nào, vì vậy bạn cần tạo ra một luồng để khởi động máy chủ. Twisted có thể chạy trong vòng lặp sự kiện GUI bình thường của bạn, nhưng trừ khi điều đó quan trọng, nó làm tăng thêm sự phức tạp.

Không sử dụng BaseHTTPServer hoặc SimpleHTTPServer, họ là ngớ ngẩn và phức tạp và trong tất cả trường hợp bạn có thể sử dụng thì bạn nên sử dụng wsgiref để thay thế. Mỗi trường hợp đơn, vì wsgiref có một API sane (WSGI) trong khi các máy chủ này có các API ngớ ngẩn.

+0

Tập lệnh này (http://bitbucket.org/julian/hatta-mirror/src/tip/hatta_gtkicon.py) đến rất gần với những gì tôi đang tìm kiếm. Nó cũng sử dụng wsgiref. – btbytes

1

Trong Sauce RC, chúng tôi sử dụng CherryPy. Vì nó là Python thuần túy, nó rất dễ dàng để nhúng nó (như là nguồn trên đĩa hoặc trong một tệp zip).

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