2012-10-26 155 views
5

背景服務器側對象雙向通信與web的應用程序開發

我的背景是高比例的面向對象的中間件和應用發展爲嵌入式設備和桌面與C++。現在我們需要爲我們的創業創建一個高規模的網絡應用程序。基於連續輪詢基於目前的Web開發框架,看起來很原始,低效的


問題

請求 - 響應。

我在尋找完全服務器端的面向對象和基於事件的編程。 下面是一個例子吧,

這個對象的方法,這個對象的

empList getAllEmployeeList(); 
empList getEmployeeOfDepartment(string strDept); 
/*Some more */ 

事件命名爲employeeManager對服務器的持久對象,

employeeAdded(empID); 
employeeEdited(empID); 
employeeRemoved(empID); 
/*Some more */ 

現在,客戶端JavaScript應該能夠調用此(服務器端)對象的方法,並且應該能夠接收此對象的事件。我們可以在異步模式下獲得方法調用的結果。框架還應提供一種方式,以便view(或html-js頁面)可以註冊所需的服務器端事件。

是否有任何框架適用於此方法學。在socketIO上面是這樣的嗎?任何提供客戶端JavaScript和服務器端對象之間良好的雙向RPC的框架?

+0

如果你說你正在使用什麼樣的服務器堆棧,這可能會更容易回答 - 例如https://github.com/SignalR/SignalR幫助將服務器端事件推送到JS客戶端(等等)。基於NET的堆棧。 – JcFx

+0

@JFFx,非常感謝您的回覆。請不要.net,我將使用Java或Javascript進行服務器編程。 – SunnyShah

+0

有一半的樂趣是從零開始構建系統的一部分 - 或許這只是我:)我害怕我不知道任何預先構建的系統要做什麼,但是看着什麼人們提出 - 是一個很好的問題。爲了說明我將要開始的事情,請+1。 – Pebbl

回答

2

NodeJSsockets.io。這些可以幫助達到預期的效果。

+0

是的,但問題是我們最終會爲它編寫大量的樣板文件。它是否提供了一種方法,以便您可以在客戶端創建一個存根,在內部處理所有服務器端對象通信? – SunnyShah

+0

也許爲js類中的每種類型的服務器端對象定義功能可以做類似的事情,但是對於所有類型都是全局處理程序 - 我不知道。取決於所需的功能 – undefined

2

Meteor是一個基於的Node.js框架,用來WebSocket的通信和MongoDB sock.js針對其定向用於橫向擴展的應用程序的數據庫。當涉及到客戶端 - 服務器同步時,流星將爲您完成所有繁重的工作 - 您不必爲數據庫同步編寫任何代碼。結果是一個最小的代碼庫,主要是你的應用程序的邏輯,而不是req/resp開銷。你可以看看這裏的例子:http://meteor.com/examples/leaderboard

1

如果你對C++很熟悉,你可能想看看G-WAN。他們有一個使用Comet的好例子(你在找什麼),還有Node.JS包裝器。

G-WAN還允許用您需要的任何語言編寫客戶端小應用程序。所以,對你而言,C++可能就是你正在尋找的東西。

這是一個非常可擴展的Web應用程序服務器。從我所見過的所有基準測試中,Node.JS的高併發性並不能很好地擴展(我可能在這方面是錯誤的,如果我願意,請告訴我,並向我提供信息)。話雖如此,我已經做了與你所談論的事情非常相似的事情。我所要做的只是編寫一個非常簡單的包裝器,從JS翻譯成當時使用的任何語言(對於我來說,我已經使用PHP,MivaScript,SMT和C完成了它)。

但是關鍵(對我來說)是使用Comet來減少對服務器的不必要的輪詢。

1

如果你想跨語言RPC,你可能會發現Apache Thrift有用。我相信有一個Javascript客戶端(但從未使用過)。你可以建立在Socket.IO之上的RPC框架許多人所指出的那樣,但感覺像畫貓看起來像一頭牛......即好玩,但沒有具體的生產

我相信你已經或者有一些遺留約束,但是如果你沒有,我會花一秒鐘的時間去思考RPC是否真的是你想要使用的模型。 RPC泄漏地抽象出網絡延遲的存在,並因此在應用程序的基礎中烘烤了一些不穩定的假設。有一個相當短的和可讀的critique of RPC一般(不少於AST)可能值得一讀。