我使用Puma和Nginx運行我的Rubinius應用程序。按照url路徑分開的線程
我想分開我的網址請求。
第一個用於api請求,第二個用於其他請求。
我認爲Puma已經開通了線程,但我想確保web請求不會阻止某個線程在我的api請求期間導致停止。我想如果一個線程忙,Puma會創建另一個線程,但我想確保一個線程始終可用於api請求。
我的主要目的是爲網址請求「保存」一個線程,這是我的用戶最需要的。
謝謝你的光。
我使用Puma和Nginx運行我的Rubinius應用程序。按照url路徑分開的線程
我想分開我的網址請求。
第一個用於api請求,第二個用於其他請求。
我認爲Puma已經開通了線程,但我想確保web請求不會阻止某個線程在我的api請求期間導致停止。我想如果一個線程忙,Puma會創建另一個線程,但我想確保一個線程始終可用於api請求。
我的主要目的是爲網址請求「保存」一個線程,這是我的用戶最需要的。
謝謝你的光。
由於彪馬考慮分離線程中的每個請求,這裏唯一的瓶頸就是這些線程訪問數據庫。除此之外,你不能保證某些線程比其他線程「更好」。
這裏值得注意的一個可能的解決方案是使用nginx
來處理它。假設您的應用正在提供內容http://some_host.com
和API
可在http://some_host.com/api
內提供。您可以配置nginx
分別處理http://some_host.com
和http://some_host.com/api
的請求。在這種情況下,您需要兩個不同的Puma
服務器實例。一個用於基本應用程序,另一個用於api請求。我的意思是當請求來到http://some_host.com
時,它由Puma A
和http://some_host.com/api/...
處理,由Puma B
處理。只要記住一件事,你可以通過分離的實例處理請求,但你仍然只有一個數據庫,除非你正在緩存內容。還有另外一個問題。你緩存你的內容嗎?如果不是,首先從緩存開始不是更好的辦法嗎?
爲什麼不拆分主應用程序和API?這很容易成爲兩個不同的應用程序與Nginx的:
location/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma1;
}
location /api/ {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://puma2/;
}
請支付的關注斜槓第二位點proxy_pass,它有助於改寫請求和忽略「/ API」前綴。
謝謝你的快速回答!在切換到Puma之前,我使用了2個Passenger(就像你爲Puma描述的那樣),但是在我看來,這不是最好的方法。我認爲這有點髒。我對你所說的'some_host.com'和'some_host.com/api'完全一樣。 API請求正在進行流式傳輸,我無法緩存這些數據,因爲它始終是一個新內容。我想確保一個Web請求不會阻止流式傳輸(例如在上傳一個大文件時)。 – BriceB 2014-10-28 16:57:51
我看,有趣的情況。你流什麼? – blelump 2014-10-28 17:06:14
音樂,視頻和很多新的內容。 – BriceB 2014-10-28 19:54:40