2011-03-21 51 views
1

我正在創建一個PHP/AJAX聊天客戶端。該應用程序向PHP腳本發出AJAX請求,該腳本獲取XML文件的內容並響應該內容。然後客戶端解析XML並顯示聊天記錄。 XML文件包含所有聊天記錄,但爲了節省服務器資源,我只希望PHP腳本返回新的聊天記錄,而不是所有聊天記錄。下面是我的XML文件:PHP/AJAX長輪詢:在可用時返回新內容

<?xml version="1.0" encoding="ISO-8859-1"?> <chat> <message> <hour>12</hour> <minute>06</minute> <half>AM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>Hey Guys!</body> </message> <message> <hour>12</hour> <minute>08</minute> <half>AM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>How are you?</body> </message> <message> <hour>3</hour> <minute>28</minute> <half>PM</half> <day>Saturday</day> <month>March</month> <date>19th</date> <body>Good, thanks!</body> </message> </chat>

<message>標籤定義了每一個新的聊天,標籤<hour><minute><half><day><month><date>定義每個聊天發送的時間,與<body>包含每個聊天。

這是我想到的解決辦法:

  1. 添加一個標籤,告訴每個聊天是什麼號碼的XML文件:<number>12</number>
  2. 在AJAX請求,讓客戶端發送最新的聊天的編號到PHP腳本以檢查它是否是最新的,然後讓PHP不斷檢查XML文件中<number>標籤的編號大於該編號,然後在數字更大時返回聊天。

我不知道這會工作得有多好,有沒有更好的方法來做到這一點?再次,我只想讓PHP腳本在他們來的時候返回新的聊天內容。有人能幫我解決問題嗎?或者指點我可能會發揮作用的東西?謝謝!

+0

如果您可以查詢XML以僅接收超過特定時間戳的數據(例如, http://domain.com/chat.xml?id=1&time=7123612376 – Prisoner 2011-03-21 16:01:59

回答

1

就個人而言,我會記錄在數據庫中的所有聊天信息。然後,每X秒運行類似以下的查詢:

SELECT * 
FROM chat_messages 
WHERE chat_id = 'your-chat-id' 
AND time_sent > 'last-time-queried' 
ORDER BY time_sent ASC 

你可以在返回XML格式的獨立腳本把這個包,那你再使用jQuery來打。然後在您的回調參數中循環所有返回的XML節點,並將它們作爲新的聊天文本行插入到請求文檔中。

2

你對自己的主意很滿意,但是...尋找新的聊天信息invloves爲每個請求打開不斷增長的xml文件...可能會變得對你的服務器來說相當沉重!爲什麼不使用數據庫,它會更輕,甚至可能會有數據庫,可以使用XML文件作爲後端...

+0

謝謝!我會考慮的! – Kincaid 2011-03-22 18:39:20