2012-01-04 163 views
1

我已經創建了一些.get和.post函數以及讀取和寫入數據到sql server的php文檔的小jquery和php聊天室。它工作正常,但小問題是當某人發佈某些內容時,需要大約半秒的時間纔會顯示(因爲延遲)。 我擔心我的編碼有問題。 即時通訊使用如何加快jQuery/php/ajax聊天室?

setinterval (listen, 300) 

用於讀取新的數據庫條目我連續jQuery函數,聽與內不用彷徨功能。如何做stackoverflow或Facebook做到這一點,使用戶鍵入內容並立即彈出?

+0

我認爲其他人實施阿賈克斯推(彗星)見http://www.ape-project.org/ – ianace 2012-01-04 03:29:40

+0

Facebook不 – xbonez 2012-01-04 03:30:27

回答

2

也許嘗試顯示輸入的聊天消息立即發佈給用戶,然後發佈到數據庫。

像這樣:

  • 用戶輸入信息,提交
  • 更新用戶的聊天窗口,使他們看到它立即
  • POST信息數據庫從數據庫
  • GET和更新所有聊天窗口
+0

可能工作! – Robert 2012-01-04 03:36:16

0

您可以使用HTML5套接字,但是這些套接字尚處於起步階段,並未得到廣泛支持(即通過IE)。

許多系統都使用Flash作爲中間人,因爲這可以使連接處於打開狀態。

使用這兩種方法中的任何一種,您都可以使用將代碼評論存儲到數據庫的PHP代碼將其推送給每個「監聽者」。這將是最快的方式。如果你的系統超級聰明,它將包含所有三個 - HTML5套接字,它可以不在Flash中,而你的常規輪詢也沒有Flash。

http://pusher.com/可能是進一步學習的一個很好的起點。

1

這可以使用各種技術來實現,這些技術有很多名稱:長輪詢,服務器發送事件,Comet,WebSockets等。

基本思路是這樣的:

愛麗絲打開的Facebook。她的瀏覽器發出更新請求(例如$ .get),但如果沒有新的更新並且請求處於「等待」狀態,則服務器不會響應。

Bob打開Facebook。他決定對愛麗絲的牆壁發表評論。他的瀏覽器將他的評論發佈到服務器($ .post)。

服務器接受這個帖子,正確處理它(保存到Alice的牆上等) 但是ALSO服務器檢查是否有來自Alice的等待更新請求。如果存在,服務器將有關此更新的信息呈現到響應流中並關閉連接。 愛麗絲的瀏覽器終於​​得到了對這個長期掛起請求的迴應,並愉快地在通知區域繪製了一個紅色的「1」。它也立即打開另一個更新請求(不要錯過任何)。

Alice看到來自Bob的評論,該評論即時提供。

該技術被稱爲「長輪詢」,它首次由谷歌在Gmail中推出。