回答
號的客戶端必須 「民意調查」 repeatadly服務器。
我認爲這裏的關鍵是要考慮交互設計。訣竅是欺騙用戶認爲聊天是即時的,但實際上每隔1或2或3或10秒更新一次。
思路:
1)當用戶發送消息時,在聊天直接顯示它並觸發輪詢。
2)如投票回來與來自其他用戶的多條消息,不添加一次全部,實際上它們添加一段1-2秒左右,隨機間距,使它看起來像他們「即刻」獨立進入。(如果一串消息立即進入,用戶很快意識到在那裏然後連續更新了聊天)。
3)如果用戶空閒了x時間。每10秒左右將投票率降至一次。
4)如果用戶處於活動狀態,即發送大量消息,則更頻繁地進行輪詢。
5)爲您寫入聊天上次更新時間的每個頻道設置一個靜態文件。例如,文件chat-teenfun-lastupdate.txt
的內容爲1224934239
或您喜歡的任何時間格式。靜態提供此文件並讓客戶端輪詢此文件以檢查通道是否已更新,而不是調用chat-poll.php?ch=teenfun
進行動態檢查。根據動態腳本所涉及的工作,靜態文件的速度大約提高10-100倍,而當您獲得250多個用戶輪詢時,您將需要它。
祝你好運,玩得開心!
/0
PS。 另外,你可以讓客戶端實現對服務器的ajax調用,並讓它們「掛起」。這就是你接受他們的請求,並假裝開始發回數據,但你只是暫停。當事情發生時,您可以使用適當的數據完成響應。爲此,我相信你需要編寫自己的HTTP服務器,具體做這個,因爲你不能在內存中存儲250個php進程。也許Lighttpd可以以某種方式用於這種LUA緩存模式。我不知道。雖然會很有趣。地獄我得嘗試一下:)
只要沒有HTTP推送技術,您將永遠不會只使用JavaScript
進行實時聊天。
可能workarrounds:
- 使用
Flash
電影或Java
小程序在服務器端執行一些socket通信 - 保持輪詢請求回幾秒鐘
肯定有,但我認爲這對很多用戶來說效率不高。您可以做輪詢每個客戶端輪詢服務器,看看是否有任何新的消息,或者你可以使用comet technique,其中服務器可以推送新郵件到客戶端 - 退房的Comet plugin for XAJAX。如何使用XAJAX和PHP來實現這一點超出了我的想法,但我將如何嘗試實現它。
讓每個客戶端連接到服務器(登錄等),則:
- 對於由客戶端(發送者)發送的每個消息更新消息隊列客戶端(接收器)
- 讓客戶端輪詢服務器爲隊列中的新消息/通過慧星推送新消息。
- 如果有新消息,則更新GUI。
- 清洗,泡沫,重複
使用像ejabberd一個真正的IM服務器可以很長的路要走,更高效,讓用戶可以通過桌面客戶端連接(如果這就是你想要的)。我可能會使用它作爲後端,IOW ejabberd將是服務器,PHP將是使用XMPP in PHP的客戶端,並充當webgui的代理。
參見:
Google Techtalk on Gmail's chat feature (and scalability issues)
這是我的$ 0.02
我見過的最好的策略是做一個AJAX請求消息,然後重新啓動完全相同的請求,一旦完成。
在服務器端,使腳本「停頓」60秒或直到收到新消息。這將保持打開相同的連接最多60秒,但是當接收到新消息時,它會輸出並立即停止,提示客戶端AJAX打開另一個連接。
這提供了幾乎即時的新消息通知,並且在服務器上比每隔x秒創建一個新連接要容易得多。
您可以使用websockets,但作爲一個新的HTML5功能它是有限的。對你來說幸運的是socksjs,它在不處理它的瀏覽器上實現了websockets。
在主機方面,您應該可以使用任何websockets服務器,PHP有一些。
如果您正在尋找實施使用PHP/JSP等腳本語言編寫的聊天服務器,掛起HTTP連接的技術將不得不從您的選項列表中勾選。原因是大多數網絡服務器(特別是共享主機)不喜歡太多的連接掛起。
您可以在"Optimized Chat Server Protocol for Server Side Scripting Languages"出版物中找到實現Web客戶端和PHP聊天服務器所需的一切。
- 1. Php - 實時聊天
- 2. 如何編寫高效的php聊天?
- 3. 如何構建PHP/MySQL實時聊天?
- 4. 實時通知在PHP和聊天
- 5. 實時聊天
- 6. 使用PHP和Websockets實時聊天應用程序
- 7. 如何使用jQuery,PHP和MySQL實現聊天?
- 8. 使用php和javascript創建實時聊天
- 9. 如何在iPhone中使用XMPP框架實現實時聊天?
- 10. PHP實時與ajax輪詢聊天
- 11. 如何在php中使用socket編寫聊天程序的服務器
- 12. Php Ajax聊天編碼
- 13. 使用PHP,websockets和MySQL進行聊天
- 14. 要編寫聊天使用UDP和MQTT協議的Android
- 15. 如何使用PHP實現真正的快速Web聊天?
- 16. 使用XAJAX和WordPress
- 17. 使用太多帶寬的PHP/javascript實時聊天
- 18. 使用Flash和PHP實現視頻聊天
- 19. Java實時聊天開源
- 20. 使用Polymer和節點的實時聊天應用程序
- 21. 聊天室和白板Php
- 22. 技術使用實時聊天像微信android和ios
- 23. 在API端使用Ionic和laravel進行實時聊天
- 24. 如何使聊天應用程序,一對一聊天UI
- 25. 用Python和PyGTK編寫的聊天程序的問題
- 26. SharePoint的實時聊天實施
- 27. 如何編寫使用nginx的和PHP
- 28. 使用Android實現實時視頻聊天
- 29. 使用Restlet api實現聊天服務
- 30. 使用MQTT實現離線聊天
你知道,這裏有一些在PHP/JS這樣的事情的現實生活中的例子?我也爲我的工作寫了一篇文章,是的,它有侷限性,但這不是不可能的。即使沒有推技術。 – elcuco 2009-06-08 17:02:39
實時對我來說實時(連接速度除外)...但你是對的:外面有很多事情,真的感覺像實時... – TheHippo 2009-06-08 17:10:26