2011-11-30 155 views
1

我希望我的網站具有聊天/羣聊功能。網站使用php/mysql構建。聊天應用程序 - 最佳方式

我已經實現了客戶端聊天屏幕。我對JavaScript/jQuery和AJAX相當不錯。 當用戶輸入消息時,它將使用AJAX調用保存到數據庫。當服務器響應成功時,我會更新聊天窗口,並與剛剛輸入的消息用戶聊天。

現在問題在這裏。 假設兩個人A和B正在聊天。 A輸入一條消息,它被保存到數據庫中並且聊天窗口被更新。 現在,B怎麼會知道A發了一條消息。

解決方案我能想到的是B需要在1或2秒後連續「輪詢」服務器。但由於某種原因,我不認爲這是正確/最好的方法。

「輪詢」服務器是一種最佳方式還是存在某種我不知道的其他方法?

我準備在其他一些語言/技術中實現這個(聊天應用程序),唯一的事情是它應該在我的PHP網站上工作。

我只是想知道什麼是設計我的PHP網站這個聊天應用程序的最佳方式。

P.S.請不要建議任何第三方聊天庫。我準備好編寫它所需的任何代碼來構建它。

+3

開放源代碼庫的優點之一是您可以閱讀他們的代碼以從中學習。雖然由於某種原因你不想使用第三方聊天庫,但你一定要看看它們是如何工作的。 – derobert

+0

它不必每隔1-2秒。如果聊天是「新鮮的」,則將「輪詢」設置爲短時間段,並且使得時間段作爲空閒時間的函數變長。例如,在最後一條消息之後每隔3-5秒刷新一次聊天窗口,如果空閒,則刷新速率爲30秒,等等...... –

+0

順便說一句,您希望編寫自己的腳本太棒了!這就是爲什麼我不使用jQuery =)+1! –

回答

0

輪詢

這是唯一的方式,如果你正在使用HTTP和JavaScript。 Http(和ajax)是單向的,客戶端總是啓動與一個動作的交互。

實現它而不進行輪詢的唯一方法是使用第三方插件(flash/silverlight/java),它允許套接字連接或轉到瀏覽器之外的本機應用程序。

編輯: 我不知道http推,但我不相信這是一個實際的方法來解決這個問題。

http://ejohn.org/blog/streaming-http-server-push/

+0

我個人認爲使用套接字連接將比預定的效率更高輪詢。 是否可以將Java與PHP結合使用?任何鏈接瞭解它? – TriNitroToluene

+0

HTTP已支持服務器推送,因爲,ummm,Netscape 1.x天。畢竟,魚攝影機使用它。 – derobert

2

如果你習慣使用的JavaScript我想你應該看看Node.js。 甚至有一個寫在節點上的聊天的好例子(你可以在github上瀏覽代碼)here

即使你更喜歡在PHP中做服務器端,我認爲這個實現的客戶端可能是一個很好的指導例子。