2011-11-11 50 views
8

我有一個使用ASP.NET MVC構建的現有複雜網站,包括數據庫後端,數據層以及Web UI層。用另一種語言重建本網站不是一個可行的選擇。Node.Js和ASP.NET MVC應用程序之間的通信

在一些視圖(客戶端)上有一些UI元素會受益於實時交互性,涉及推和拉,所以不是在asp.net中實現某種自定義長輪詢或websocket服務器,我期待利用Windows的node.js和Socket.io。

我的問題是我需要兩種應用程序之間的雙向通信。每個用戶只有在ASP.NET網站上獲得授權後才能接收數據,因此我首先需要溝通。其次,一旦某個事件發生在ASP.NET網站上,我想立即將這些數據推送到節點服務器,以便廣播給特定的用戶或用戶組。第三,我希望發送到node.js服務器的任何數據被推送到ASP.NET網站進行處理,因爲這是我們所有的業務邏輯所在。添加Node.js的唯一原因是有可能將數據直接推送到客戶端,我不希望構建任何業務邏輯(或儘可能少)。

我想知道在Node.Js和ASP.NET之間雙向推送通信的最快方法是什麼。目前爲止,唯一不錯的選擇是在node.js服務器上的特定端口上創建一個特殊的偵聽器並連接到該端口,但我想知道是否有更優雅或更高效的方法?我也知道你可以在兩者之間使用數據庫,但是肯定需要進行輪詢並且效率較低?這兩個服務器將在Visual Studio項目下的同一臺服務器上運行。

非常感謝您提供的任何幫助。

+0

對於這個問題的新手,有一個名爲[EdgeJS](http://tjanczuk.github.io/edge/#/)的庫,它是所提出的解決方案的替代方案。最好的事情是它可以兩種方式 - 你可以有.NET或節點作爲控制過程。 –

回答

3

我不是一個ASP.NET專家,但我認爲多種方式可以實現這一點:

1)正如你所說,你可以把節點的特定端口上的數據和監聽然後根據收到的數據作出反應(TCP)
2)您可以向Node.js(HTTP)發出POST請求,並且還可以在此過程中發送auth密鑰以提高安全性。就像1)節點會對你發送的數據作出反應。
3)爲pub-sub使用類似Redis的東西,從ASP.NET(pub)發送消息並在Node.js部分(sub)中獲取它們。如果你想在多臺計算機等擴展您的應用程序,這是更好的

2

唯一不錯的選擇,我所知道的,到目前爲止是Node.js的服務器上的特定端口上創建一個特殊的 監聽器並連接到, ,但我想知道是否有一個更優雅或更有效的方法 ?

您可以嘗試查看redis pub/sub模型,其中ASP.NET MVC應用程序和node.js將通過單獨的通道進行通信以實現全雙工通信。或者,您也可以嘗試使用CouchDB change nofitications

我也知道你可以在中間使用數據庫,但是這個 肯定需要輪詢,效率會降低嗎?

以前的技術不要求您輪詢更改,而是會在更改或通道消息到達時通知您。

相關問題