2014-04-25 12 views
2

我目前在Azure網站上使用signalR和單個實例將數據推送到客戶端。沒問題。用於角色間通信的Azure SignalR和背板

我們將我們的項目分解爲單獨的web/worker和wcf角色,以便我們可以獨立擴展它們。

該網站將以這種方式工作。

方案A

用戶提交的一些數據,網絡的作用,它被放在一個服務總線隊列準備好工人A,發送給工人提供的報文是一個新的項目已經被添加的情況下,它的閒置(以保存輪詢)。當工作者A處理它時,將消息發送回推送給特定客戶的網絡角色。

方案B

在WCF角色接收數據,它被放在一個不同的服務總線隊列準備好工人B,WCF角色發送消息到一個新的項目已在情況下增加了它的閒置工人B中。當工作人員B處理完畢後,向Web角色發送消息並將其發送給特定的客戶端。

說明下面不好: Diagram

我要使signalR服務總線背板網絡角色分配給用戶。我不確定的是如何讓我的角色彼此溝通。

我需要:

Web角色=>工作者來說

工人A => Web角色

WCF角色=>工人乙

工人B =>網頁角色

我在網上創建中心,工作者A和工作者B都是機智h服務巴士話題?然後以某種方式連接signalr .net客戶端?我如何確保它能夠在不公開公開地公開暴露於Web角色的所有實例?

出於某種原因,數百個客戶端通過JavaScript連接到我的Web角色集線器似乎很簡單,但嘗試連接一些內部的連接器,我無法弄清楚。

回答

5

如果任何人的興趣......我落得這樣做是這樣的:

我創建的Web和WCF角色上都集線器。 Web角色有一個連接,它允許在/ signalr處使用javascript代理,並且web和wcf角色有一個不在/ signalr-internal中的代理。

我使用Azure服務總線作爲背板,並讓它自動處理web和wcf集線器,無需額外修補。

在signalR身份驗證中,我查看了連接來自哪裏(例如,內部端點或外部ssl端點和拒絕/允許訪問基於此的特定集線器,這使我可以使用.net信號客戶端在我的工人自動連接/重新連接等

這最後沒有問題作爲尚未很好地工作,這是很容易實現。如果我遇到任何問題,我會及時更新。

編輯#1 :

不要使用這種方法!一切都非常出色,直到你真的將它部署到一個現場環境中,然後你會遇到一系列讓我想把我的頭髮撕掉的問題。

我實際上最終做了什麼(在現場完美地工作)是使用服務總線主題併爲聽衆創建訂閱。這將創建TCP連接並允許您的通信在內部保持100%,而不會出現任何瘋狂的傳輸或邊界問題。

編輯#2:

由於這個職位,事件集線器是釋放和我們切換,再也沒有回頭。看到最後的評論

+0

你能描述更多你的問題是什麼?它是否使用服務總線作爲背板?服務總線背板支持10種網絡角色,目前我們正在經歷一系列生產困難。它導致我們整個網站的完全鎖定。我們現在已經轉移到Redis背板,但仍在尋找有類似問題的人。 –

+1

我最終不再使用主題/訂閱(我開始獲取吞吐量問題)。我現在幾乎全部使用Event Hubs,它們非常棒,更重要的是客戶端看起來非常堅固並且有很大的空間。如果每個事件只能放256KB(或者將數據存入表存儲並通過事件中心放置一個參考),那麼你就可以逃脫。看一看。 –

1

Peter,實際上爲了讓這種方法起作用,您需要切換到IaaS虛擬機上託管的Web角色或IIS。

當前網站不支持Azure虛擬網絡,這是在Azure上的實例之間啓用專用網絡互連的唯一方式。

您可以將虛擬機,Web和工作人員角色添加到虛擬網絡,該虛擬網絡應該爲您提供您正在查找的訪問權限,而無需通過公共端點公開所有內容。

+0

嗨西蒙,我們已經切換到網絡,工人和wcf角色像上面的圖。我正在嘗試一些內部終端和signalR,我會在完成後發佈解決方案。 –