2013-07-13 24 views
8

Có thể sử dụng Gunicorn để xử lý các WebSockets và các khung nhìn WSGI thông thường cùng nhau trong một ứng dụng (Flask) không?WebSockets và WSGI cùng nhau thông qua Gunicorn

Tôi biết cách để các websockets hoạt động bằng máy chủ GGent WSGI, và tôi có thể chạy một ứng dụng WSGI thông thường chạy với Gunicorn, với các nhân viên gevent, nhưng khi tôi cố gắng phục vụ cả hai từ một ứng dụng bằng Gunicorn một lỗi:

ValueError: View function did not return a response

Có thể phục vụ hai từ một ứng dụng bằng gunicorn không? Tôi lên kế hoạch cuối cùng để đặt tất cả sau nginx, và tôi không chống lại việc chia ổ cắm thành một ứng dụng khác và có hai giao tiếp, miễn là điều đó không đòi hỏi quá nhiều tài nguyên hệ thống bổ sung. Cho đến lúc đó, có cách nào để làm theo cách này không?

EDIT:

Tôi đã tìm ra cách làm việc này. Điều quan trọng là 1) thay đổi chức năng ghi nhật ký cho gevent và 2) đảm bảo chỉ định cho gunicorn rằng tôi đang sử dụng các công nhân lớp geventWebSocketWorker.

tôi tìm thấy một phần của câu trả lời này trên trang web này: http://d.hatena.ne.jp/Malan/20121007

Đối với hồ sơ, tôi nghĩ rằng nó có thể là một ý tưởng tốt hơn để có một máy chủ đang chạy lốc xoáy/xoắn/autobahn (nhờ Jordan) và một chạy thứ WSGI của tôi . Nhưng đó không phải là những gì tôi muốn ở đây :)

def log_request(self): 
    log = self.server.log 
    if log: 
     if hasattr(log, "info"): 
      log.info(self.format_request() + '\n') 
     else: 
      log.write(self.format_request() + '\n') 

import gevent   
gevent.pywsgi.WSGIHandler.log_request = log_request 
from geventwebsocket.handler import WebSocketHandler 
from gevent.pywsgi import WSGIServer 

sudo gunicorn -c gunicorn_config.py -k  "geventwebsocket.gunicorn.workers.GeventWebSocketWorker" router:app  
+1

Điều này có liên quan đến những gì bạn đang làm không? http://stackoverflow.com/questions/13137449/combining-websockets-and-wsgi-in-a-python-app – Jordan

+0

Tuyệt đối, nhưng tôi muốn tránh sử dụng xoắn hoặc lốc xoáy với dự án này, nếu có thể. –

+0

Bạn nên bỏ gunicorn để ủng hộ uwsgi. – user37203

Trả lời

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