2015-10-20 52 views
-2

我嘗試在使用Windows Server 2012/IIS代替buit-in服務器的php 5.6中在Symfony2中配置GoS \ WebSocketBundle,當我在Ubuntu中使用內置服務器時,我沒有任何問題。在Azure中使用IIS配置WebSocketBundle

每當我嘗試訪問IIS給我一個403錯誤,我已經試圖使用SimpleWebSocket Chrome插件沒有成功。

我使用的基本URL的WebSocket,WS://my.example.com,我已經嘗試了WSS => WSS://my.example.com

服務器在Azure中託管,啓用Websockets。

有什麼想法?

感謝,

+0

您是否將您的應用程序託管在Azure VM上? –

+0

我沒有vm,我使用預先配置的「Web Application + MySql」包,它爲我提供了一個支持PHP的IIS,Azure告訴我們這個IIS託管在Windows Server 2012中,但我無法訪問它。 – Eric

回答

0

隨着Web應用程序僅支持端口80用於HTTP端口443的HTTPS流量。不同的端口配置將被忽略,流量將被路由到80或443.

我們需要爲WebSocketBundle服務器配置超過80的附加端口。並且在本地環境中,如果我將端口設置爲80,則必須以管理員權限運行其命令以啓動websocket服務器。

我跳入GOS/WebsocketBundle SDK中,發現它使用stream_socket_server()來啓動websocket服務器。 因此,我使用以下代碼片段在Azure上創建了一個簡單測試: <?php $socket = stream_socket_server("tcp://0.0.0.0:80", $errno, $errstr); if (!$socket) { echo "$errstr ($errno)<br />\n"; } else { while ($conn = stream_socket_accept($socket)) { fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n"); fclose($conn); } fclose($socket); } ?> 結果是我們沒有成功運行腳本的權限。 我們可以在Azure虛擬機或雲服務上部署套接字服務器應用程序作爲解決方法。