2013-01-12 42 views
1

我有一個頁面,內容是動態獲得的php和Mysql.I使用foreach循環來顯示所有的內容。Twitter的更新時,新的行被添加到數據庫

foreach($data as $key){ 
      echo "<div id="post_content"> $key['post'] </div>"; 
     } 

現在,我得到我的飼料只是因爲它是,但,需要刷新此問題的頁面,你看到從數據庫中新的崗位行之前。 這就是twitter的用途,當你在twitter上,並且你正在關注某人的新帖子時,它會在Feed的頂部顯示「1條新推文」,點擊它可以添加推文的內容到飼料。 從我的研究中,我發現了一些方法來做到這一點;

  1. Websockets。缺點:跨瀏覽器兼容性。

  2. 使用AJAX:refresh = setInterval(function(), 5000);缺點:嗯,加載腳本每5秒:/

  3. 有人recomended socket.io給我,我仍然在尋找如何將它與PHP的整合。

我的問題是,是否有任何其他有效的(優先簡單和有效的)方式來做到這一點? 任何幫助將不勝感激。

+0

您不想爲每個連接設置套接字。我會做AJAX。您可以通過在用戶進行一定量的非活動之後不更新調用服務器來改進您的腳本。這將使您的服務器免受非活動用戶的攻擊。 – Boundless

+0

但是該頁面基本上是我的主頁,即使對於活躍的用戶來說,它仍然是效率低下? – Saff

+0

如果您使用套接字,您將極大地限制您的網站可以同時擁有的用戶數量。對於可以打開多少個套接字有一個限制,並且您的服務器必須投入資源來保持這些套接字打開。 – Boundless

回答

2

問題是,任何套接字有關的限制在特定時間點打開的連接數量。所以如果你不打算提供數以千計的併發雙工連接,那麼你最好使用AJAX和JSON的組合。 我建議你實施輪詢間隔。例如,當用戶在一段時間後沒有活動時,增加間隔或假設沒有什麼新的事情顯示5-10個民意調查,增加間隔,或許每次加倍,直到達到,比方說2分鐘。在獲取消息或值時,將間隔減少到5秒或更少。

1

最簡單的方法是提供某種類型的API,以便以JSON格式訪問新的「推文」,然後將它們預先添加到HTML中。
socket.io也是一個不錯的選擇,因爲它結合了多種技術,例如websocket,長輪詢等,並且在使用舊版瀏覽器時可以很好地降級。你可以在網上找到許多關於socket.io的教程。然而,socket.io依賴於node.js服務器端的JS,所以如果你不熟悉這可能會有點複雜。看看這個鏈接雖然:Using PHP with Socket.io

+0

謝謝,這只是讓我承認我必須學習node.js :( – Saff

+0

)你仍然可以通過提供一個JSON API去查找它,然後每隔X秒通過AJAX查詢它 – Stefan

+0

嗯,我想過但我猜這樣做效率不高,我怎麼知道我的託管帳戶允許我使用node.js,並且可以推薦一個好的教程?謝謝@stefan – Saff

相關問題