2012-02-21 114 views
2

我一直在做一些研究,以顯示「用戶在線」計數器的最佳方式,更新到第二個嘗試避免連續的Ajax輪詢。PHP共享主機上的WebSockets

顯然WebSockets似乎是最好的選擇。因爲這是一個內聯網,所以我會讓它成爲使用Chrome或Safari的必要條件,所以不應該存在兼容性問題。

我一直在閱讀一些關於WebSockets的文章,因爲我是新手,我想我非常瞭解它是如何工作的。

我不是很確定如何用PHP實現它。 Node.js似乎是自然的選擇,因爲它的「始終運行」性質,但這不是一個選項。

爲什麼我最困惑的是PHP運行的事實,當它完成時,它結束。如果PHP結束,套接字連接不會丟失?或者,如果PHP重新運行它會回看用戶的IP? (我不認爲這有可能)

然後我發現這個庫 http://code.google.com/p/phpwebsocket/ ,但它似乎是一個小老頭(僅提及鉻是夜間使用WebSockets兼容)

在一個點上說:「從在命令行中運行server.php程序來偵聽套接字連接。「這意味着我需要SSH,許多共享託管計劃沒有。

我還有一個疑問是該庫的源這個其他行:

set_time_limit(0); 

這是否意味着PHP文件將連續運行?這是允許共享主機?從我知道的所有主機在1分鐘2分鐘超時後殺死php。

我有一個與在線用戶的MySQL表,我想使用PHP通過websocket向用戶登錄到這些在線用戶的數量。有人可以幫助我,或者在有更好的信息的地方指出我可以實現的目標嗎?

感謝

+0

網絡套接字非常受歡迎,但如果可以使其發揮作用,服務器發送的事件可能更適合您的目的。 SSE顯然可以在JS的舊版瀏覽器中支持,而websocket不支持,而且你似乎不需要雙向通信。我試圖通過PHP SSE問題在這裏工作:http:// stackoverflow。com/questions/9070995/html5-server-sent-events-prototyping-ambiguous-error-and-repeated-polling – tomfumb 2012-02-21 02:07:12

+0

我沒有任何兼容性問題,因爲我可以控制使用的瀏覽器,並且我對WebSockets感興趣,已經看到它在trello.com上的工作,它的作品像魅力 – Juan 2012-02-21 03:22:01

+3

我建議你不要嘗試使用PHP的有狀態應用程序,因爲PHP首先是爲此設計的。正如您所指出的,共享主機可能會阻止打開任意套接字。您最好的選擇是獲得您自己的VPS服務器http://www.lowendbox.com/ – 2012-02-21 06:25:47

回答

2

的WebSockets將需要大量的事情即使在專門的託管,拋開共同主辦。

對於您的要求服務器發送事件(sse)是正確的選擇,因爲只有服務器將數據推送到客戶端。

SSE可以簡單地調用服務器腳本,非常像阿賈克斯,但客戶端將接收並能夠通過部分處理的數據部分,因爲它的用武之地。DOM事件會產生每當一些數據的用武之地。

但即使在版本10中,IE也不支持SSE。因此,對於IE,您必須使用某種後備技術,比如「foreever iframe」。

就託管而言,普通的共享主機(以及不太便宜的主機)將允許php腳本運行很長時間,只要它們不被視爲問題。