2011-11-30 64 views
3

我可以根據需要在HTML5當前不斷變化的WebSockets服務器實現你的經驗。我們希望將這項技術用於在客戶端網站上使用常見網頁瀏覽器的項目。我們現在需要的是滿足我們要求的網絡服務器。它們是:WebSockets的服務器

  • 用Java或PHP編寫,因爲這些是當前所有程序員在項目中使用和掌握的語言。由於似乎還沒有很有前途的PHP實現,我傾向於專注於Java網站。
  • 儘可能快。我們並不期望在生產中使用過多,但我們需要能夠在獨立主機上近乎實時地同步兩個瀏覽器。
  • 易於擴展。我們需要在websocket之上實現我們自己的協議,所以我們希望最大的靈活性。
  • 易於使用,有據可查的,積極的發展。由於我們必須快速實現首次運行的實現,並且由於我期望開發人員在此期間發生一些變化,如果不難進入服務器編程,那將是非常好的。

我已經看過一些看起來很有前途的服務器/框架, Jetty,Netty和jWebSocket。我還發現了一些關於這個主題的更老的討論。但是,對於那些已經使用Java(或PHP)與Websockets一起工作的人的現有經驗或建議,我會很高興。是否有一些特別合適的實現或者我們絕對不應該使用的實現?爲了清楚起見:當我談到在Websockets上實現我們自己的協議時,我的意思是有某種插件機制,以便我們可以使用WebSocket將XML消息發送到服務器,然後使用插件將它們解釋爲我們喜歡的某些服務器操作。我猜每個服務器實現也支持這個,但如果編寫這樣的插件不是太困難,那將是很好的。

回答

1

我沒有與任何PHP經驗,所以我會給你我對Java(和Python側)的意見。

對於Java:

你有你非常常見和安全的Tomcat選擇。它是最積極開發的服務器之一,它的開源,大型社區提供的大量支持/幫助,從我讀過的(但沒有經過測試)它可以很好地擴展,還有一個非常成熟的控制檯來監視針對您網站的不同指標。

您也有其他選擇,例如Caucho的樹脂,誰擁有一個非常小而靈巧的團隊誰積極發展自己的網絡服務器。他們的新心跳服務提供了良好的可擴展性(再次從我讀過的)。

然後你也有谷歌的AppEngine這是所有關於可擴展性。他們的API(兩個,服務器和客戶端)已經開始專注於實時的Web應用程序,因此它是一個更容易一點的,而不必擔心你經常不得不做出與其他服務器的服務器相關的優化創建高性能的Web應用程序。他們有API用於在服務器和客戶端之間爲非常實時的應用程序創建「通道」。 AppEngine團隊還擁有用於快速/高效分析數據的新MapReduce API。出於這些原因和個人認爲他們開創了新的Web技術/標準,我個人一直傾向於AppEngine。如果你保持cpu/data usuage低,那麼它是免費的,但如果你需要全面部署,它開始變得昂貴,所以研究。如果你的項目更多的是爲了娛樂/學校,它的免費配額已經足夠,所有的開發工具/ API都是免費的,所以它是完美的。

對於Python:

我比Python更多的Java,但是Python絕對是一個偉大的語言,非常非常非常簡單易學。我在這裏推薦Python的原因是因爲AppEngine還允許開發人員選擇Python。 Python語言的作者/創建者現在已經在AppEngine團隊中,所以即使Python和Java API幾乎完全一樣,他們有時也會爲Python提供新的/更好的API。例如,我認爲隨Python提供的數據存儲API更容易一些,並針對Google數據存儲進行了優化。另外,由於您使用的是Python,因此您可以在AppEngine中使用Django。

我最近意識到的第二個選擇是由FriendFeed開發的龍捲風web服務器,然後由Facebook購買和使用。它也積極發展。但是我提出這個問題的原因是Tornado的重點,就像AppEngine的一樣,是Web應用程序的高性能和可擴展性。我沒有經驗,但我對它的技術感興趣,因爲沒有人可以競爭Facebook需要一個非常高性能/可擴展的Web服務器。

一些最後的想法:

一般來說,你會發現,這是不是很困難的基礎上,從大多數Web服務器(甚至Asp.NET MVC)提供的API的頂部自己的協議。但是從我已經能夠使用AppEngine進行測試的角度來看,它確實專注於靈活地構建它的頂級協議。對我來說,它幾乎就像一個在HTTP之上工作的RPC服務器。如果僅僅因爲一些語言結構而使用Python,那就更加明顯了。

+0

感謝您的回答。 Google AppEngine的確看起來很有前途,但我擔心它不適用於Websockets。另外,我們已經有了一個現有的服務器基礎設施(使用Tomcat,但不幸的是它不支持Websockets),並且將爲我們提供這個項目。 – j0ker

+0

是的,沒錯。這個問題已經得到AppEngine的確認,並且有關使用TyphoonAE的方法。現在,AppEngine有一個類似用例的Channel API,谷歌自己使用Google API和GChat相信的東西。但我確信AppEngine也會很快發佈Web Sockets API。 –

相關問題