2012-10-30 24 views
15

Tôi đang làm việc trên một thử nghiệm khoa học, nơi có khoảng hai chục người thử nghiệm chơi trò chơi theo lượt với/chống lại nhau. Ngay bây giờ, nó là một ứng dụng web Python với giao diện WSGI. Tôi muốn tăng thêm khả năng sử dụng với websockets: Khi tất cả người chơi đã hoàn thành lượt của họ, tôi muốn thông báo cho tất cả khách hàng để cập nhật trạng thái của họ. Ngay bây giờ, tất cả mọi người phải đợi thời gian chờ, hoặc liên tục tải lại và chờ thông báo lỗi "lần lượt vẫn đang trong tiến trình" không xuất hiện trở lại (chờ đợi, hiệu quả).Kết hợp websockets và WSGI trong ứng dụng python

Tôi đọc qua nhiều tài liệu của thư viện websocket và tôi hiểu cách websockets hoạt động, nhưng tôi không chắc về kiến ​​trúc để trộn WSGI và websockets: Tôi có thể có một websockets và một máy chủ WSGI trong cùng một quá trình (và nếu Vì vậy, làm thế nào, sử dụng thực sự bất kỳ thư viện websockets) và chỉ cần gọi my_websocket.send_message() từ một xử lý WSGI, hoặc tôi nên có một máy chủ websockets riêng biệt và làm một số IPC? Hay tôi không nên trộn chúng?

chỉnh sửa, 6 tháng sau: Tôi đã bắt đầu quá trình máy chủ websockets riêng biệt (sử dụng Autobahn), thay vì tích hợp nó với máy chủ WSGI. Lý do là nó dễ dàng hơn và sạch hơn để tách hai trong số họ, và nói chuyện với máy chủ websockets từ quá trình WSGI (máy chủ đến máy chủ truyền thông) đã thẳng về phía trước và làm việc với nỗ lực đầu tiên sử dụng websocket-client.

+0

Bạn đang sử dụng khung web python nào, nếu bạn đang sử dụng? – John

+0

Không có gì ngay bây giờ, nhưng tôi mở cho bất kỳ đề xuất nào. – Simon

+0

cũng trong trường hợp đó tôi đề nghị của oberstet thứ hai để sử dụng bình. – John

Trả lời

14

Dưới đây là một ví dụ mà những gì bạn muốn:

Nó chạy một ứng dụng WSGI web (Flask dựa trên trong trường hợp này, nhưng có thể là bất cứ điều gì WSGI phù hợp) cộng với một Máy chủ WebSocket dưới 1 máy chủ và 1 cổng.

Bạn có thể gửi tin nhắn WS từ bên trong trình xử lý Web. Autobahn cũng cung cấp PubSub trên WebSocket, giúp đơn giản hóa việc gửi thông báo (qua WampServerProtocol.dispatch) như trong trường hợp của bạn.

Tiết lộ: Tôi là tác giả của Autobahn và làm việc cho Tavendo.

+0

Tuyệt vời, đó là chính xác những gì tôi đang tìm kiếm! Ngoài ra, tôi đã không biết về các giao thức trên đầu trang của Websockets được nêu ra. – Simon

+0

Để có giới thiệu nhanh về WAMP (= RPC + PubSub trên WebSocket), hãy xem http://wamp.ws/ – oberstet

+0

liên kết gitub Busted và phiên bản mới dường như không phải là ứng dụng WSGI ... – pjz

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