簡體   English   中英

如何加快jquery / php / ajax聊天室的速度?

[英]How to speed up a jquery/php/ajax chatroom?

我已經創建了一個小的jquery和php聊天室,其中包含一些.get和.post函數以及用於讀取和寫入數據到sql server的php文檔。 它可以正常工作,但是一個小問題是,當某人發布某些內容時,它大約需要半秒鍾才能顯示出來(由於滯后)。 我擔心我的編碼有問題。 我正在使用

setinterval (listen, 300)

作為用於讀取新數據庫條目的連續jquery函數,listen是一個內置.get的函數。 stackoverflow或facebook如何做到這一點,以便用戶輸入內容並立即彈出?

也許嘗試將輸入的聊天消息立即顯示給發布它的用戶,然后再將其發布到數據庫中。

像這樣:

  • 用戶輸入消息,提交
  • 更新用戶聊天窗口,以便他們立即看到它
  • POST消息到數據庫
  • 從數據庫獲取並更新所有聊天窗口

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

基本的想法是這樣的:

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

鮑勃打開Facebook。 他決定評論愛麗絲的牆。 他的瀏覽器將他的評論發布到服務器($ .post)。

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

愛麗絲看到鮑勃的評論,立即發布。

所描述的技術稱為“長輪詢”,它最初由谷歌在Gmail中引入。

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

許多系統將Flash用作中間人,因為它可以保持連接打開。

使用其中任何一個,您都可以使用將代碼存儲到數據庫的PHP代碼,並將其推送到每個“偵聽器”。 這將是最快捷的方式。 如果你的系統非常聰明,那么它將包含所有三個 - HTML5套接字,閃存不可能,而你的常規輪詢也沒有Flash。

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

大多數具有快速聊天功能的站點都使用一種稱為彗星的技術。 你可以在這里閱讀更多相關信息: http//ajaxian.com/archives/comet-a-new-approach-to-ajax-applications

它本質上是一塊經過修改的服務器軟件,它等待向用戶返回響應,直到發送消息或即將超時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM