簡體   English   中英

收到新的味精時刷新聊天框

[英]Refresh chat box when new msg received

我是PHP新手。 我將使用一個聊天框PHP創建一個簡單的Web應用程序。

我不知道在收到新的味精后立即刷新聊天窗口的更好方法。 我唯一想到的就是經常刷新頁面。 我知道這不是一個好主意。

我知道如何使用AJAX,因此我只能刷新聊天框(而不刷新整個頁面)。 但是在AJAX中,客戶端也必須發送請求。

當收到新的味精時,服務器是否可以刷新聊天框?

是的,有一種方法可以通過服務器通知客戶端。 叫做

WebSocket

使用此技術,您可以隨時將數據從服務器發送到客戶端,反之亦然。 它會創建一個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和網絡開發,建議您尋找一個不錯的消息庫。

  • 如果您需要支持較舊的瀏覽器,則該庫支持上述幾種技術,並且會退回到最適用的情況
  • 如果可以使用現代瀏覽器,請使用一些基於WebSocket的庫。

暫無
暫無

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

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