在this post上,我瞭解了XMPP的用法。這樣的事情是必需的,更重要的是,我的主要問題擴展了:只能使用標準的HTTP和瀏覽器技術(例如PHP和JS,或RoR和JS等)有效地構建聊天服務器和客戶端嗎?或者,最好是堅持使用像XMPP這樣的舊協議,找到一種方法將它們與我的應用程序集成?基於瀏覽器的聊天需要特殊技術?
我通過LiveHTTPHeaders和Firebug查看了CampFire大約5分鐘,它似乎使用Ajax發送一個請求,這個請求在另一個聊天發生之前是不會回答的。這只是CampFire在服務器上打開一個新線程來偵聽更新,然後在線程聽到更新時返回對請求的響應?我注意到他們正在請求一個特定的端口(8043
,如果內存服務於我),這讓我覺得他們正在做的事情比我剛纔提到的要複雜得多。此外,請求的網址以/tcp/
開頭,我發現它很有趣。
說明:我不希望在同一時間內所有房間中有超過150名用戶在現場聊天。據我所知,如果我正在爲成千上萬的併發用戶構建像CampFire這樣的聊天服務的託管支付服務,那麼我應該投入時間研究特殊技術,並嘗試以簡單的方式在我的應用中重新發明輪子。另外,如果你打算用服務器輪詢來做,你會不會經常砰地一聲調查,以最大限度地提高響應,而不會耽誤服務器?
@kibibu +1非常好,這正是我認爲CampFire正在做的。現在我在這個聊天遊戲中感覺不到這樣的n00b。任何關於服務器在回覆之前如何等待而不浪費資源的想法?線程? – orokusaki 2010-04-07 06:02:46
Apache在線程方面已經很不錯了。我認爲在大多數Web語言中使用sleep()可以在線程中與OS很好地協作,因此您可以輪詢(在服務器端!)並在沒有新消息時進行睡眠。 – kibibu 2010-04-07 06:07:41
再次感謝這真的很有幫助。 – orokusaki 2010-04-07 06:10:40