2010-03-03 59 views
0

我開發了一個基於Flash的聊天客戶端,它顯示屬於一個組的用戶發佈的消息以及他們的用戶名和寫作時間。數據存儲在一個帶有組ID,用戶ID和消息的mysql數據庫中,以便它保持在聊天會話之外,並允許用戶以後登錄查看討論,而不是聊天,更多的是通知板。當用戶寫郵件時,我希望聊天客戶端立即更新,看起來像是實時聊天。到目前爲止,我的解決方案是在我的Flash代碼中加入一個間隔,它調用一個PHP頁面,該頁面查詢數據庫中的新評論並將其返回給Flash。我的基於Flash的聊天客戶端不夠健壯?還有什麼其他的方式?

我認爲從我讀到的這種方法稱爲長輪詢?是對的嗎?這對於音量足夠強大嗎?當有變化時,我會更好地將數據推送給客戶嗎?我如何檢測這些更改?我看過APE的例子,但我不認爲這將消息存儲在數據庫中。

有什麼建議嗎?

+0

「我認爲從我讀過的這種方法被稱爲長輪詢?是嗎?」不,我不認爲這是正確的。您所描述的內容聽起來像是輪詢,而不是長時間輪詢。 – 2010-03-03 19:19:53

+0

更新了我的帖子,解釋長投票 – back2dos 2010-03-04 10:37:17

回答

2

的投票的壞處在於,它可能會變得非常快速。

讓我們假設,你有10000位用戶在線,誰想要聊天有沒有超過1秒更大的延遲。然後,你將以每秒10000個請求轟炸你的服務器。

對於不需要是最新的小東西或事物,投票是一個很好的方法,因爲它的簡單,並不能真正出問題。

如果這僅僅是一個小社區,高達使用聊天100人,那麼這應該不是問題。除此之外,您可以使用APE或SmartFox或Red5或許多不同的東西來創建持久中繼服務器,即與所有客戶端具有永久連接並通知其發生任何更改的服務器(例如,新消息)。

一如既往,我個人的建議是使用haXe。您可以使用chat tutorial開始。 haXe的學習曲線相當陡峭,但我認爲這是完全值得的。我很高興把ActionScript和PHP都留下了。

編輯:你所描述的不是long polling。此外,你幾乎不可能用PHP進行長時間輪詢,至少如果使用Apache經典的話。 Apache將創建一定數量的PHP進程。任何時候請求到達時,它都會尋找一個免費的PHP進程並讓它處理請求。當PHP進程完成時,它將響應發送回客戶端。如果沒有可用的進程,它將緩衝請求,直到進程可用。因此,如果您嘗試使用PHP以經典方式進行長輪詢,您可以完全阻止整個服務器。

+0

非常感謝。 :) 最好 – undefined 2010-03-04 14:38:18

1

如果你想通知每當接收到一個新的消息,那麼你就必須實現某種形式的應用程序的服務器上監控的數據庫/提醒在它的變化,然後通過更新給客戶端應用程序。

這應該比只是輪詢更有效率,因爲如果你認爲交通流量低的情況下,通過輪詢你將會把服務器從地獄中抽出來 - 無論如何,只有當有一個理由......

當您在一個註釋類型,您的客戶端可以直接通知該應用程序(通過Web服務)的變化,然後該助手應用程序可能會更新數據庫...

應該說,雖然我在聊天程序方面的專家 - 從未涉及一個個人...