2012-03-11 60 views
1

我期待創建一個使用PHP,MySQL和JavaScript的Web聊天系統。在PHP + MySQL + JavaScript中的Web聊天

目前,我將消息存儲在MySQL數據庫中,增量ID(是,已編入索引),時間戳,發件人和消息本身。然後我使用AJAX每500ms查詢一次數據庫,看看是否有最近收到的消息比最後收到的消息多。但是,我有一種感覺,這可能是非常低效的,因爲當多個用戶在線時,這會導致MySQL服務器上的大量負載。在谷歌和這裏看了一下,似乎一切都指向了這樣做。

我的問題:有沒有更好的方法來做到這一點?有關如何減少服務器負載的任何提示也將受到歡迎。

我在Apache web服務器上使用PHP 5.3,因此與這些庫兼容的庫或插件都沒問題。

編輯: 忘了在原帖中提到,但我並不擔心支持IE或其他過時的瀏覽器。

+0

你是正確的程序。如果它是造成負載,然後只是嘗試增加時間(500毫秒)一點點 – 2012-03-11 09:14:10

+0

請看看這個:http://stackoverflow.com/questions/136012/comet-and-jquery&也是這樣的:http://聊天.nodejs.org/ – 2012-03-11 09:14:37

回答

1

你應該看看ajax長輪詢,簡而言之,這是一個簡單的ajax調用,但如果沒有新數據,將不會從服務器返回結果。你只需要在服務器端做一個簡單的循環,直到新數據可用然後返回它。當然,如果在一段時間後沒有結果發送給客戶端(例如1分鐘),然後重新啓動呼叫,則必須最終停止​​該操作。

+0

你能提供一個這樣的代碼示例嗎?看起來好像它可能是我想要的,但我現在還沒有真正做到如何去做。 – 2012-03-11 09:17:56

+0

http://stackoverflow.com/questions/333664/simple-long-polling-example-code – slash197 2012-03-11 09:19:17

0

我想,聊天是太密集的存儲引擎MySQL。也許,MEMORY表格類型可以,從來沒有使用它。我與幾位開發人員交談,每個人都同意,聊天的最佳選擇是Memcache,甚至可以編寫自己的自定義守護進程(只有內存存儲爲weel)。

對於客戶端部分,您可以通過flash/Java對象閱讀關於短輪詢,長輪詢和Web套接字/套接字的內容。

使用AJAX來查詢數據庫每500ms

短輪詢。

3

潛在可行的基本方法:

  • 緩存你最近50個內存緩存中的信息。每當將新條目添加到數據庫時重置此項。當新用戶連接時,向他們提供這50條消息以填充他們的聊天室。
  • 使用http://www.pubnub.com/等第三方服務將消息發送給您的客戶。無論何時將新消息發送到聊天室,都要在pubnub上發送消息。您的服務器代碼將在成功寫入數據庫後執行此操作。

筆記:我不跟pubnub無關。你不需要在上面使用50條消息。根據您想要設置的方式,您甚至不必在連接時向他們發送任何消息。重點在於,在這種情況下,您希望避免用戶從數據庫中讀取數據 - 該模型對於這種類型的應用程序來說可能無法擴展。

理想情況下,一個平坦的環境將是理想的這種應用程序。 LAMP堆棧並不特別適合。

2

我使用這個圖書館,Pubnub。 Pubnub是一種通過javascript或任何TCP語言(如PHP)發送無線電信號的簡單方法,並且JavaScript會立即收到發送的消息。

在PHP中,您可以簡單地將它保存到數據庫 - 然後使用Pubnub的PHP API將消息發送給頁面上的其他人。

如果您熟悉Html,Javascript和PHP - 可以相當容易學習。我會推薦它。

2

您正在詢問一個專門用PHP,MySQL和HTML構建的Web聊天系統。有許多選項,包括預先構建的解決方案:http://www.cometchat.com/http://www.arrowchat.com/,這些解決方案都具有由像http://www.pubnub.com/這樣的雲提供的雲端服務提供的聊天彗星服務,並提供自己託管的選項。有關CometServices http://www.cometchat.com/cometservice/third-party-alternatives的更多信息,請參閱您比較服務提供商的內容。還有幾個選項,但我建議從那裏開始。如果您需要更簡單的東西,比如HTML和JavaScript解決方案,可以查看http://www.pubnub.com/blog/build-real-time-web-apps-easy這是一個關於使用10行JavaScript代碼中的示例聊天應用程序輕鬆構建實時Web應用程序的博客。該解決方案通過爲所有瀏覽器和移動設備提供完整的跨平臺來縮短開發時間。

0

套接字是比AJAX輪詢更好的解決方案,但是沒有太多關於如何將基於套接字的聊天與MySQL集成在一起。

我已經做了一些測試,並有一個基本的例子在這裏工作:https://github.com/andrefigueira/PHP-MySQL-Sockets-Chat

它使建立在PHP聊天服務器的使用棘輪(http://socketo.me/)的。

,您可以通過與誰在聊天的信息向服務器發送JSON發送聊天消息在DB,(當然,如果你有用戶會話)