Tôi chỉ đang tìm cách xây dựng một trang web mới với Falcon và gevent, điều mà tôi đã làm trong quá khứ. Tôi biết rằng có điều gì đó kỳ lạ về nó, vì vậy tôi đã tìm kiếm trực tuyến và tìm thấy câu hỏi của bạn. Tôi hơi ngạc nhiên khi chưa có ai trả lời. Vì vậy, tôi quay trở lại để có một cái nhìn tại mã trước đây của tôi và sau đây là bộ xương cơ bản để có được và chạy với Falcon và gevent (mà làm cho một khuôn khổ rất nhanh):
from gevent import monkey, pywsgi # import the monkey for some patching as well as the WSGI server
monkey.patch_all() # make sure to do the monkey-patching before loading the falcon package!
import falcon # once the patching is done, we can load the Falcon package
class Handler: # create a basic handler class with methods to deal with HTTP GET, PUT, and DELETE methods
def on_get(self, request, response):
response.status = falcon.HTTP_200
response.content_type = "application/json"
response.body = '{"message": "HTTP GET method used"}'
def on_post(self, request, response):
response.status = falcon.HTTP_404
response.content_type = "application/json"
response.body = '{"message": "POST method is not supported"}'
def on_put(self, request, response):
response.status = falcon.HTTP_200
response.content_type = "application/json"
response.body = '{"message": "HTTP PUT method used"}'
def on_delete(self, request, response):
response.status = falcon.HTTP_200
response.content_type = "application/json"
response.body = '{"message": "HTTP DELETE method used"}'
api = falcon.API()
api.add_route("/", Handler()) # set the handler for dealing with HTTP methods; you may want add_sink for a catch-all
port = 8080
server = pywsgi.WSGIServer(("", port), api) # address and port to bind to ("" is localhost), and the Falcon handler API
server.serve_forever() # once the server is created, let it serve forever
Như bạn có thể thấy, mẹo lớn là trong bản vá khỉ. Ngoài ra, nó thực sự là khá đơn giản. Hy vọng điều này sẽ giúp một ai đó!
Thiết lập này hiệu quả với tôi. Cần lưu ý rằng không chỉ Falcon có thể làm việc với các gevents, nhưng bạn cũng có thể tận dụng các cấu trúc gevents như 'spawn',' sleep' và 'Semaphore' trong ứng dụng của bạn. Tôi đã sử dụng chúng để tạo công nhân nền chạy độc lập với mã được yêu cầu. – killthrush
Tôi cũng đã thử chạy Falcon bằng cách sử dụng máy chủ Bjoern như trái ngược với pywsgi kích hoạt gevent. Trước đây là nhanh hơn và có thể hỗ trợ các yêu cầu/giây được duy trì cao hơn dựa trên một số thử nghiệm hello-world của tôi, nhưng vòng lặp sự kiện không rõ ràng và bạn không thể sử dụng gevent trong mã ứng dụng của mình. @ kvaruni của thiết lập cho phép bạn gõ vào vòng lặp sự kiện gevent. Đó chắc chắn là điều cần xem xét khi chọn một máy chủ WSGI để lưu trữ Falcon. – killthrush