2012-12-02 126 views
-1

我是新的php/mysql,已決定實施一個簡單的聊天應用程序。下面是一些具體的問題..Php聊天應用程序問題


1) 了Facebook,如果我發送聊天信息,使用JavaScript更新它的聊天記錄,但它也將拿出一個「未能兌現」後,一些標記時間如果連接丟失。我的問題是如何在使用AJAX/jQuery發送消息之前檢查與服務器的連接是否已建立,以便我也可以通知用戶他的消息未被髮送。


2)考慮這個簡化方案。該聊天室有2個時隙,即,只有2人可以共享聊天室和彼此隨時聊天。在情況下的第三用戶試圖登錄後,他會被告知聊天室已滿。我可以將用戶的登錄數據存儲爲會話變量或類似的東西。我的問題是這樣的...如果兩個人已經聊天,一個人只是關閉瀏覽器而沒有註銷或類似的東西...在這種情況下,會話變量仍然存在,應用程序仍然認爲2人正在聊天房間..如果用戶在瀏覽器窗口中未處於活動狀態併爲第三位參與者騰出空間,如何刪除會話變量?


3)聊天應用程序(如fb聊天和谷歌聊天)如何更新他們的聊天記錄?他們是否要求整個聊天記錄(比如由10條消息組成)還是僅僅使用AJAX請求當前消息?每個請求的理想持續時間是多少?我正在使用1秒...

回答

1

1)在jQuery的Ajax回調函數告訴你,如果錯誤內容時發生:

$("#form").submit(function(){ 
    $.post("post.php", { 
     message: $('#field').val(), 
    }, function(data, status){ 
     alert("success"); 
    }).error(function(){ 
     alert(error); 
    }); 
}); 

http://api.jquery.com/jQuery.post/

2)您可以定期輪詢(如每分鐘)的服務器,如果用戶不要」 t聯繫服務器,銷燬會話或在onunload被觸發時向服務器發送斷開連接命令(不太可靠)。

3)我會發送服務器的時間戳或最後一張圖片的ID,它會從那以後發回我的所有消息。

這取決於你想要聊天多少「實時」。 1秒到10秒是理想的。

+0

哦很好.. jquery爲我返回狀態.. – BLOB

1

我認爲大多數聊天應用程序不使用ajax。 ajax的問題​​是服務器沒有直接向客戶端發送消息的機制。如果您使用ajax,則每個客戶端都必須定期檢查服務器。

此問題的解決方案是websockets或長輪詢。檢查出ratchet它是php的websockets。


如果你堅持使用AJAX,您可以:

  1. 上追加提交到div存儲在class='ephemeral'消息類。如果阿賈克斯失敗只是$('.ephemeral').append('failed')
  2. 這可以通過不斷ping通服務器與ajax調用,如果客戶端沒有ping過服務器在最後5秒客戶端已斷開連接。
  3. 您可以將服務器發送的最新聊天消息的時間發送給服務器,並在該時間之後從數據庫中提取聊天消息。這需要將每次聊天保存爲數據庫中的單獨一行。
+0

是的..我檢查出來..但我希望沒有使用websockets ..我需要先學習的基礎知識 – BLOB

+0

@BLOB看到更新 –

+0

是的......這似乎很簡單..一個noob問題仍然...如何在服務器端記錄時間?我的意思是..使用哪個php函數? – BLOB