0

我要實現對整理出如下圖所代表的問題的arquitecture如何中繼HTTP web請求對前提API:基於網絡套接字

Cloud to On-Premise API

基本上,我有部署雲中的公共API(Azure),但數據位於內部部署的機器上。內部部署機器公開提供數據的Swagger API。每臺內部機器都有一個唯一的標識符(安裝標識符),可以讓我們路由請求。

我已經開發了基於Azure的服務總線的繼電器模塊上的方法如下解決方案在以下鏈接提示:

Secure Internet Access to an On-Premise API

該解決方案基於Azure的服務總線的繼電器模塊理清我的問題,並符合我的大多數需求,但它有一個問題,延遲是可怕的。

我已經在相同的地理區域部署了公共API和服務總線端點,並且一個簡單的請求GET /公司平均需要1.5秒,本地API中的處理時間非常短,僅爲幾個毫秒..

爲了保持低延遲,我一直在考慮使用網絡套接字,但我不知道是否最好的方法銘記該場景,因爲對於公共API的每個請求,我會必須打開一個web套接字通道到ApiController內部的API,並關心它的生命週期(在返回響應之前關閉它)。

顯然,在這種情況下,本地API中的每個ApiController應同時提供對Web套接字和http的支持。

另一種解決方案,它將實現一個http代理,將公共API的原始請求轉發到內部部署API,但從我的角度來看,儘可能使用沒有連接性的通信P2P實現最佳延遲中間的經理,因此我現在的重點是在網絡套接字上。

我想盡可能符合標準,因此我想使用「純」網絡套接字,這意味着不使用Signalr。

有一次,我已經暴露了我的問題,解決辦法和方案,我的問題如下:

  1. 我怎樣才能打開一個網頁插座ApiController類的動作方法中並轉達原從公共API到內部部署API的http請求?

  2. 如何在協議HTTP和WebSockets的本地API中提供支持。預置API應該能夠處理HTTP請求,但也可以處理WebSocket請求。

  3. 我的第一個打賭是使用System.Net.WebSockets,但我想知道是否存在與ASP.NET Web API集成時發光的任何websockets庫。

回答

0

簡單的請求GET /公司需要1。平均5秒,內部API的處理時間非常短,僅爲幾毫秒

您正在使用Azure中繼服務將服務安全地公開到公有云,據我所知,由於影響很多因素(例如客戶端必須首先向服務總線中繼進行身份驗證),我們無法實現與內部部署服務器相同的延遲。

此外,this article用示例說明了如何創建自定義HTTP處理程序來接受客戶端WebSocket請求,您可以引用它來修改您的API應用程序來處理WebSocket請求。