2012-10-31 28 views
1

我試圖打開一個套接字 - > PHP頁面來從數據之中,但我對如何打開它不確定:如何打開Web Socket?

var socket = new WebSocket("ws://myurl.com/sockets/socket.php"); 

if(socket.onopen) 
    alert("Open"); 
else 
    alert("Not Open"); 

我已經jQuery的最新版本,我的指數掛鉤(在我的這個腳本的鏈接之上)並且我的PHP文件中沒有任何內容 - 只是查看我是否可以打開連接。我錯過了什麼或做錯了什麼?

+1

WebSockets需要服務器上的協議支持,特別支持帶有WebSockets安全頭的HTTP升級握手。簡單地將WebSocket指向PHP腳本將不起作用。 – josh3736

+0

我有點不確定你的意思 - 所以我只需要定義用什麼協議打開腳本?我需要類似Node.js的東西嗎?如果有問題,我正在運行Apache。 –

+0

好的文章,可能澄清一些事情的websockets,http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/ – Despertar

回答

5

WebSockets需要服務器上的協議支持;具體而言,支持使用WebSockets安全性頭的HTTP升級握手。簡單地將WebSocket指向PHP腳本將不起作用,因爲PHP腳本會說HTTP,並且WebSockets不是HTTP –它是完全不同的協議(儘管它基於HTTP)。

如果你想在PHP中使用的WebSockets,你需要使用一個specializedlibrarythat implements的WebSockets的協議(我用沒有這些,他們只是第一Google results)。

當然,Apache和PHP並不是真正實時工作的最佳工具。我會使用Node(以及優秀的socket.io包),它旨在處理大量併發的持久連接。

+0

我必須誤解的人完全是什麼Web套接字用於...雖然我只是使用[本教程](http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/)哪些套接字到一個PHP腳本 –

+0

HTTP是一個請求/響應機制,瀏覽器請求一個頁面,服務器(在你的情況下,Apache + PHP)發送一個響應,服務器不可能啓動到瀏覽器的連接,或者推送數據,這就是WebSocket的作用:瀏覽器將TCP連接與服務器建立在一起,服務器可以隨時發送數據,而不僅僅是響應請求 – josh3736

+0

我甚至建議使用nginx over Apache(當然,如果可能的話) - 據我所知,每個開放的TCP連接是另一個pache線程,而nginx有助於緩解這種情況(我可能會錯誤地記住確切的問題)。 – Ian