2014-05-05 124 views
1

運行WebSocket PHP server是否需要額外的(Apache,PHP,防火牆等)配置?我們是否需要通過ws協議明確請求?如果是這樣,該怎麼辦?WebSocket PHP服務器配置

我有Linux虛擬服務器與ISPConfig 3. PHP腳本正在運行,但客戶端得不到服務器響應。

+0

您正在使用哪些PHP代碼?當我做到了,我不需要額外的配置。 –

+0

來自https://github.com/morozovsk/websocket –

+0

的'Chat'示例當您運行命令「php index.php start」時,您是否收到消息?或者你的命令行暫停? –

回答

1

對於我來說,我必須做到以下幾點。

使用git克隆存儲庫。

編輯WebsocketDaemon.php,使第12行的代碼爲$this->pid = getmypid();

確保php可執行文件位於PATH中。

在cmd中導航到websocket\samples\chat\server(必須從存儲庫移到您的網絡服務器)並運行命令php index.php start,這會導致您的cmd暫停。

啓動您的網絡服務器(任何端口,但8000,因爲這是您的網絡套接字服務器運行的端口)。

在任何支持Web套接字的瀏覽器中打開兩個網頁,其中包含以下鏈接http://localhost/websocket/samples/chat/client/

輸入一條消息,它應該工作(假設網頁說你最初連接)。

一句警告。我試圖使用PHP套接字服務器來製作遊戲,但我遇到了內存問題。這裏有一篇關於它的帖子PHP Out of Memory Exception

+0

我已經完成了所有步驟,除了「啓動web服務器」(Apache已經運行)。經過漫長的等待,客戶端關閉與1006代碼的連接(「異常關閉」)。 –

+0

感謝您提供有關內存不足異常的警告。已通知。 :) –

1

首先檢查確保端口(它看起來像8000)在防火牆中打開。在ISPConfig默認防火牆只具有以下端口打開:

TCP:20,21,22,25,53,80,110,143,443,993,995,3306,8080,8081,10000

UDP:53

你可以通過登錄並進入ISPConfig控制面板中的System來看到這一點。然後在系統類別下的左側菜單中找到防火牆。它應該顯示你的防火牆規則。

2

首先,websockets是完全不同於HTTP的協議,所以依靠Apache是​​不必要的。您可能仍然使用Apache,因此您可以將Web瀏覽器指向某處,但從根本上說,當您的Javascript客戶端代碼連接到您的websocket服務器時,您的websocket服務器不應該通過Apache運行。

如果您確實必須將PHP用於websocket服務器,我建議您在命令行上運行PHP並使其無限期地在後臺運行。這很重要,因爲實現websocket服務器的代碼不應該終止。您的websocket代碼將監聽您選擇的端口號。就我個人而言,我使用9000+端口,但是選擇取決於您。

我認爲至關重要的是要注意,您爲websocket實現選擇的語言可能與您用於處理HTTP請求的語言完全不同。就個人而言,我使用PHP進行HTTP請求,但是我的websocket服務器(提供實時視頻遊戲)完全是用C++編寫的。連接到websocket服務器的實際客戶端代碼是用Javascript編寫的。

由於各種原因,我認爲你應該爲websocket服務器選擇C++或Java,主要是因爲這些語言中存在良好的支持庫,並且如果需要,您將可以使用強大的多線程功能。如果你想要這些語言的websocket服務器實現的建議,你可以問我,我會提到一些工作。最後,我想補充一點,當我決定編寫一個基於websocket的服務器時,我首先研究了在PHP中實現它的可能性,但很快就決定了C++會更好地滿足我的需求。希望你也可以切換到C++或Java(或者Ruby)。