2011-07-17 14 views
8

我有幾個使用hookbox構建的項目來管理Web客戶端和服務器之間的實時消息傳遞。 Hookbox非常棒 - 它完全抽象了傳輸層,並通過一個優雅的安全系統在不同的頻道上展示了一個簡單的發佈/訂閱界面。實時網絡庫 - 用socket.io替換hookbox或什麼?

不幸的是,hookbox項目由於原來的維護者不願意放棄所有權而迅速陷入了混亂之中。 (Grrr!)所以很難再把它看作一個可行的平臺。

什麼是提供與網絡應用程序實時通信的好平臺?系統要求:

  • Works無縫地跨瀏覽器,使用HTML5 websockets或COMET可用。運輸選擇應該對應用層不可見。我不關心古代瀏覽器(IE6)
  • 來自javascript和服務器端系統(即在php/python/ruby​​中)的客戶端訪問 - 這是至關重要的
  • 提供包含任意有效負載的發佈/訂閱隱喻
  • 允許客戶端,看看有什麼其他的客戶端通過回調到任何Web應用程序連接到一個通道,即存在
  • 細粒度的訪問控制(最好有)

我聽說插座。 io可以做到這一點,但我知道它在堆棧的較低層。它可以連接到非JavaScript庫嗎?做auth?

回答

2

雖然我還沒有嘗試過,但我開始關注Pusher的Node Knockout 2011條目。除了JavaScript中,它支持以下非JS的客戶:

  • Objective-C的
  • 的ActionScript
  • .NET &的Silverlight
  • 紅寶石
  • 的Arduino

如果消息通過第三方是可能性,你可以嘗試使用他們的沙盒計劃免費服務(20連接&高達100K信息/天),看看它是否符合你的需求。 (我對「存在」要求有些不確定,儘管它可能在文檔中有所描述。)

+0

開源將是很好的,PHP和Python客戶端也是如此,但除此之外,這似乎是我正在尋找的。謝謝! – Leopd

3

我在過去8個月裏與NodeJSSocket.IO有很好的交流經驗。服務器端組件對我來說非常穩定 - 我可以讓它以非常高的消息量運行,並且它的駐留內存永遠不會高於20MB。到目前爲止,我只能在不終止服務器的情況下運行約4周,但那只是因爲我需要更新我的服務器端代碼。

Works無縫地跨瀏覽器,使用HTML5 websockets或COMET可用。運輸選擇應該對應用層不可見。我不關心古老的瀏覽器(IE6)

提供任意負載

Socket.IO也是一塊神奇的軟件發佈/訂閱的比喻。它正在積極開發之中,並且使用'on'(訂閱)和'emit'(發佈)的EventEmitter(NodeJS)語義構建了一個簡單的pub/sub風格抽象。客戶方面對於使用的運輸也非常透明。我主要用於直接WebSocket支持,但它可以回退到基於Flash的套接字,xhr-polling和jsonp輪詢。從JavaScript和服務器端系統

客戶機訪問(即在PHP /蟒/紅寶石) - 這是臨界

是的NodeJS的JavaScript,在V8發動機運行。它有大量的3rd party modules,提供了很好的抽象以及與外部組件(如數據庫或消息隊列等)之間的接口。至於用php/python/ruby​​命中系統,它可以像打任何其他服務器一樣工作。選擇你的通信方式(基本的TCP/IP,或HTTP POST或GET,甚至通過文件系統),NodeJS並不關心誰在提供數據。就我個人而言,我已經實現了一個運行良好的C#客戶端。

允許客戶端,看看有什麼其他的客戶端連接到一個通道,即存在

它不沒有任何建立在「存在」的邏輯,雖然用內置的「的pub/sub '已經存在於Socket.IO中的邏輯,您只需要在服務器上存儲狀態,以便新客戶端可以檢索現有狀態數據。我已經在保留狀態的服務器上實現了我自己的基本pub/sub,並且一起(包括NodeJS服務器代碼和基本的Socket.IO存根)只有50行JavaScript(包括空格)。

細粒度通過回調到任何Web應用程序的訪問控制(最好有)

不知道你通過回調到任何Web應用程序通過「細粒度訪問控制的意思(最好有)」。發佈/訂閱事件/觀察者隱喻使用回調函數,因此您可以將特定操作與特定事件掛鉤。

是否auth?

我沒有必要爲我們的系統做任何認證,所以我不能直接對它說話。然而,如果你瀏覽NodeJS模塊,你會注意到有許多auth模塊可用,包括LDAP和OAuth,更不用說one module,它聲稱做OpenId,Google,OAuth,Twitter,LinkedIn,Yahoo,Readability,Dropbox,Justin .tv,Vimeo,Tumblr,OAuth2,Facebook,GitHub,Instagram,Foursquare,Box.net,LDAP「

+0

當然,使用任何語言使用REST接口將消息發佈到發佈/訂閱系統是相當容易的。最重要的部分是將實時消息推送到非JavaScript客戶端。實時回調到其他語言需要一個非平凡的客戶端庫。 – Leopd

0

我使用node.js進行重塗,其中包含各種各樣的庫。一個實時消息庫是now.js。我對此沒有太多的經驗,但已經嘗試過了,我會說它運作良好,擁有你說的所有你需要的東西。

+0

看起來不像它支持任何非javascript客戶端或有任何類型的訪問控制。 – Leopd

+0

訪問控制最可能使用node.js的其他庫進行訪問。正如我解釋你的問題,你需要從瀏覽器和服務器端程序訪問。如果你在node.js中編寫你的服務器,你有兩個。我誤解了你嗎? – Godisemo

+0

是的,你誤解了。我正在尋找一種解決方案,而不是一種可以讓我構建解決方案的API。 – Leopd