[英]Refresh chat box when new msg received
我是PHP新手。 我將使用一個聊天框PHP創建一個簡單的Web應用程序。
我不知道在收到新的味精后立即刷新聊天窗口的更好方法。 我唯一想到的就是經常刷新頁面。 我知道這不是一個好主意。
我知道如何使用AJAX,因此我只能刷新聊天框(而不刷新整個頁面)。 但是在AJAX中,客戶端也必須發送請求。
當收到新的味精時,服務器是否可以刷新聊天框?
是的,有一種方法可以通過服務器通知客戶端。 叫做
使用此技術,您可以隨時將數據從服務器發送到客戶端,反之亦然。 它會創建一個TCP連接並保持打開狀態,直到您手動關閉它為止。
我以前沒有在php中使用過它,但是谷歌快速搜索給了我一些庫的結果,因此您應該找到一個合適的解決方案。 但是,我認為在其他連續運行的服務器上,node.js服務器更適合此功能。
然后,可以在客戶端通過JavaScript中的WebSocket進行通信。
首先打開連接
var webSocket = new WebSocket("ws://www.example.com/socketserver");
然后,您可以等待傳入流量並處理函數中的數據
webSocket.onmessage = function (event) {
console.log(event.data);
}
這只是一個簡短的概述。 您將找到有關此主題的很多信息,例如在Mozilla開發人員網絡中
Web應用程序中的標准通信順序是HTTP請求由Web客戶端(瀏覽器)發起,然后由服務器響應。
您需要的是角色互換並且服務器計算機請求客戶端計算機接收消息。
這稱為服務器推送 。 鏈接的Wikipedia文章列出了許多解決方法。
客戶端反復詢問服務器是否有新消息是最簡單的方法,稱為輪詢,但是如果操作頻率較高,則會給服務器帶來壓力(如果有多個客戶端這樣做,則會成倍增加),而響應頻率不夠低對於許多用例。
盡管其他用戶emsch使用了大字體,但WebSockets尚不適用於所有人(因為),因為並非每個瀏覽器都支持它。 將您的瀏覽器/操作系統矩陣與瀏覽器實現進行比較 。
幾年前我最喜歡的是BOSH ,我更喜歡Comet之類的其他方法:BOSH需要服務器擁有的連接才能使服務器響應,而可能需要與服務器建立第二個連接才能使客戶端響應。 由於可能會發生超時,因此一段時間后將以較低的頻率執行空交換。 因此,如果沒有消息到達服務器或客戶端,則BOSH的行為類似於慢速輪詢。
如果您不熟悉Web和網絡開發,建議您尋找一個不錯的消息庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.