2015-05-28 67 views
3

我需要一個API網關用於我的websocket應用程序。WebSocket的API網關

  1. 分析,並從某些IP識別異常請求
  2. 配額和速率限制
  3. 統計
  4. 免費或商業
  5. 可靠的性能

我的WebSocket的子協議WAMP,所以恐怕沒有現成的產品來完成這項工作。

我打算開發一個,並假設它會以這種方式工作:

enter image description here

  • 還有就是我的客戶端應用程序和我的WebSocket服務器之間安裝一個代理(NGINX或HAProxy的)
  • 代理複製請求/響應到其他應用,我稱之爲monitor
  • monitor應用分析的流動和控制代理,以限制/阻止某些IP。
  • monitor應用程序同時運行,如果它下來,它不會影響我的應用程序和代理。

這種方法聽起來是可行的。但代理似乎不支持重用上游連接到monitor

假設從代理建立到客戶端10K連接,則代理也確立10K連接上游到monitor應用程序?這是不可接受的。

我希望只有一個或代理和monitor之間建立多個連接發送重複的請求/響應。當然,代理通知monitor每個請求/響應的真實來源/目標。

是否有任何代理或產品滿足此要求,因此我只需要少開發?

回答

0

(TL; DR ...對不起!)
我正在開展一項與G-WAN非常類似的項目。最初,我編寫了API servlet,這些servlet運行良好,沒有充分利用G-WAN功能。藉助G-WAN支持的一些指示,我開始探索使用處理程序;我將API servlet移植到處理程序中的URL重寫例程中(API查詢返回的絕大多數內容都是靜態/預先呈現的內容)。我現在正在處理404處理程序例程,以捕獲我們尚未預先渲染內容的情況,將它們轉換爲按需渲染請求並動態構建響應。

從客戶端來看,它看起來完全動態。但通過對靜態路徑進行URL重寫並允許G-WAN派遣我們的按需案例,它減少了我們必須編寫的代碼量,並且使用G-WAN中的一些高度優化的功能。我提到這些細節是吉爾稱之爲「打破模具」的例子。最初我們的方法看起來很像我們將如何使用nginx進行實現(除了不需要像fcgi這樣的網關)。它一直儘管一旦我們剝離下來要求並扔掉了很多假設有關Web服務應該如何構造相當的改善。謹慎的

一個字,如果你打算在C++進行開發。從G-WAN到外部庫的鏈接是「C」而不是「C++」。他們做了這樣的性能和內存佔用的理由(很好的選擇),但我並沒有想到,當我開始編寫一些C++的庫例程時,我打算從我的G-WAN servlet和處理程序中引用,除了來自各種C++應用程序。這不是一個炫耀者 - 大量的「C」庫在C++應用程序中工作得很好。但是從servlet通過G-WAN通過「C」連接引用動態C++類庫(.so)會很麻煩。 (我的簡單修復是將我的「共享」C++代碼移動到.h文件中,並將它們包含到我的G-WAN處理程序和servlet中,以及我的C++應用程序中。不乾淨但方便)。你5個特定點,從G-WAN觀點:

  1. 根據您的「分析」和「不尋常」,這可能很容易地在C/C++來完成你的協議處理程序中,也可以利用定義的外部圖書館。有多種方法可以實現這種異步,無論是作爲單獨的進程,還是隻是非阻塞I/O,如果阻塞是一個問題。

  2. 而且很容易從一個處理程序管理。

  3. 同上。

  4. 是的。 :)取決於你想要的支持水平。如果您完全依賴SO和其他社區支持,則免費。我們選擇了低廉的支持訂閱,並且這些回覆遠遠超出了我們的預期。

  5. 噢!我們在頭幾天證實了這一點。

哦,還有最後一件事:一旦你已經花了一兩個小時寫一些G-WAN的servlet,你可能很難有時間可以追溯到其他Web /應用/服務的機制。使用servlet,我只需保存編輯器中的更改並在瀏覽器窗口中進行刷新以查看新結果(使用fcgi實現嘗試!)。我在我的服務器上運行了多個G-WAN實例(針對不同的IP地址和端口號進行配置),因此在單臺計算機上,我有多個開發代碼庫階段以及一個生產服務器。對於開發,我在終端會話中(而不是守護進程)運行G-WAN,並且可以在我的servlet和處理程序代碼中使用printf(...)來查看後端發生了什麼,以及發生了什麼我的瀏覽器窗口。

欲瞭解更多信息:

祝你好運!

0

G-WAN protocol handler將允許您通過單個連接(或每個工作線程的連接提供更高的可伸縮性)實現multiplex這樣的代理。

這就是G-WAN變得容易:打破模具創建定製解決方案。

+0

謝謝,有沒有任何文件或tur嗎? –

+0

http://www.gwan.ch/developers#handler – Gil