2010-04-15 29 views
3

我正在創建一個網站,用戶將能夠聊天並通過瀏覽器相互發送文件。我正在使用GWT的UI和休眠與吉利德連接到MySQL數據庫後端。什麼是最好的方式來實現一個網站,用戶可以在一起互動

什麼是使用的最佳策略?用戶可以一起交互?

+0

它必須是網頁(JSP/HTML)還是客戶端應用程序(Applet,Webstart)? – BalusC 2010-04-15 23:24:05

+0

對不起,它使用gwt的html weppage – molleman 2010-04-17 19:16:12

回答

2

我想說你正在尋找彗星/ AJAX |服務器推/等。有關這方面的信息,請參閱my previous answer。基本上你是模擬反轉服務器和客戶端之間的通信 - 這是這是在這裏啓動連接,因爲它想要,例如,通知用戶他/她的朋友剛上線等。

這項技術的實施變化相當迅速,所以我不會做出任何明確的建議 - 選擇最適合您的需求的建議:)

2

COMET是允許在網頁上聊天的技術 - 它基本上是通過保持溝通活動連接。這允許服務器將信息推送給客戶端。 GWT在客戶端有幾種實現方式。 現在大多數服務器都支持這個,它也是Servlet 3.0規範的一部分(目前還沒有人實現)

+0

@Romain:已經實現了Servlet 3.0,例如,由Glassfish v3發佈。 – 2010-04-16 09:19:29

1

雖然COMET非常好,但它不是唯一的解決方案!通常使用時間間隔進行輪詢(而不是COMET長輪詢)。也可以要求用戶手動刷新。

以Stackoverflow爲例 - 對於大多數情況,您必須手動刷新瀏覽器以查看更改。我認爲,它通常被認爲是正常的和預期的。 COMET或頻繁投票是額外的好處。

COMET的問題是,它可以很容易地導致服務器上的大量線程。除此之外,如果您另外使用異步處理(也稱爲「高級IO」),但尚未得到很好的支持(例如由於嚴重錯誤而無法在Glassfish v3中使用HTTPS),可能會導致Apache連接器等問題

頻繁輪詢的問題是,它會產生額外的流量。因此,通常需要減少輪詢次數,這會使最終用戶不太方便。

所以你將不得不權衡你的特定情況的選項。

+0

雖然普通的網絡服務器(Apache是​​最大的罪犯,nginx是最小的;))並沒有很好地處理這些開放連接,但像APE(Ajax Push Engine)這樣的專用服務器和像nginx這樣的更好設計的網絡服務器相當這是一個挑戰;)恕我直言,彗星公司對服務器的壓力要比每隔x秒不間斷地輪詢一次服務器要低得多 - 爲了保持客戶端數據是最新的,你需要x很小。另外,我不認爲在這裏完全刷新是一個解決方案,因爲這會挫敗在GWT中創建網站的全部目的。 – 2010-04-16 11:16:51

+0

@Igor:我同意服務器 - 只是,有些人除了使用Apache之外別無選擇!完全刷新後,我不一定要完整刷新頁面。它也可以是點擊更新鏈接/按鈕,導致Ajax調用。而問題是什麼給服務器,Comet或者持續輪詢造成了更大的壓力,取決於幾個因素:如果消息以極快的速度到達,或者它們分佈相當均勻,那麼COMET的優勢很小 - 但是自從COMET是有狀態的,你總是有記住狀態的開銷。這真的取決於! – 2010-04-16 11:56:18

相關問題