2010-07-16 54 views
1

我正在爲drupal開發一個聊天模塊。我計劃爲聊天消息處理提供多個後端。我最初開始使用AJAX,現在已經包含了長輪詢技術。然後我碰到猿(阿賈克斯推動引擎),它看起來很有希望。但是它需要猿的服務器端安裝才能使聊天模塊正常工作。儘管我也將其作爲聊天的後端之一,但我的主要焦點是找到一種解決方案,它可以處理可接受數量的同時聊天連接,而無需對服務器端進行任何修改,以便人們可以輕鬆使用它。PHP套接字是製作基於PHP jQuery的聊天的可行選項嗎?

我是衝浪淨和整個PHP Socket編程來了,它看起來像一個可行的選擇。

  • 如果我寫了一個基於PHP的聊天服務器,我將能夠保持它可以在兩個方向上只使用jQuery(連同動作腳本)發送數據(從服務器到客戶端,反之亦然)的連接?很明顯,我不會在客戶端使用AJAX。
  • 也多少會連接服務器能夠同時處理,如果我寫一個有效的PHP基於套接字的對話腳本,說我奉獻的RAM 50MB呢?
  • 將人們對共享主機將能夠運行基於PHP的服務器端的代碼,因爲他們沒有shell訪問,就像我們要運行的cron的選項?
  • 此外,我已經讀過的地方PHP不是多線程語言,所以你不應該使用套接字。這是真的?
  • 是否還有其他方法可以使用,並且在不進行任何服務器端修改的情況下會比此效率更高?

回答

2

你應該想一想:每一個新的連接將阻止PHP程序。所以,如果你建立了一個socket連接並讓它長時間打開,PHP進程將被阻塞,它不能接受另一個連接。因此,如果您有50個PHP進程,則可能會同時建立50個連接。

這就是爲什麼我個人更喜歡使用Node.js的像聊天彗星的應用...

1

是PHP插槽用於製作PHP基於jQuery聊天一個可行的選擇? - 沒有:)

並給予你的內存共享主機和大約50MB我建議PHP真的不是某個選項的限制。

在現實中,HTTP是不是真的適合這種事情,HTTP是一個無狀態的請求/響應的基於協議,你需要的是一個有狀態的持續性協議,如XMPP。

你可以「砍」使用它的網絡技術,因爲你已經有長輪詢和Ajax,這在技術上做到這一點通過HTTP的唯一方式完成,HTTP聊天的所有其它變體總是是連續計時輪詢或長輪詢,這些都是通過客戶端服務器http設置完成的唯一方法。

通過使用諸如node.js這樣的技術(請參閱node.js聊天演示),您可以通過「更輕」的方式實現此目的,這在資源服務器端較輕,但有種敲擊共享主機的要求。

或者,您可以使用爲工作制作的技術來做到這一點,後者將在後端使用XMPP/Jabber服務器,並在前端使用基於Flash/Flex的XMPP客戶端 - 這樣每個後端可輕鬆支持5000多個連接服務器,但又一次被共享主機要求所殺死。

在很長很長的一段時間裏,Web架構答案的答案是在所有設備上都有HTTP Server,Cache和Client,這將使每臺設備成爲P2P網絡中的一個節點,並且我們所有人都可以做任何事情,還有很長的路要走:)

希望有所幫助!

+0

嗯,他的問題是關於在原始套接字上使用一些*非* -HTTP協議。 – timdev 2010-07-16 17:40:31

+0

@timdev你確定這一點,我沒有看到提到的非HTTP協議,也回答了非HTTP協議,並且正如你所希望的那樣,一個xhr客戶端如何與不完全正確的http協作? – nathan 2010-07-16 17:49:08

+0

使用Websocket協議。但大多數人還不能使用它;需要Firefox 4或更新的Chrome版本。 – NikiC 2010-07-16 17:53:59

0

PHP並不完全適合這類問題。你可以編寫一個使用pctnl函數的守護進程在每個連接上分配一個新進程(最多可以配置#個活動進程),但是它會消耗內存,因爲你爲每個連接分配一個新進程。根據你的要求,我會找別的地方。

你似乎想在共享網絡主機上安裝這個東西,而我可以理解爲什麼,你應該至少認識到你並不是真的託管一個Web應用程序,你正在主持一個聊天應用程序(也許有一個基於Web的用戶界面)。

0

我認爲它可以工作,用php,jQuery和服務器上的一些SQL,和一些重型捏造

我雖然使用Ajax,你爲什麼不?那麼你coudl跳過插座?