的WebSocket与Apache虚拟主机

的WebSocket与Apache虚拟主机

问题描述:

我有两个不同的应用两个Apache虚拟主机:的WebSocket与Apache虚拟主机

<VirtualHost *:80> 
    Servername socket1.app 
    DocumentRoot d:\xampp\htdocs\socket1.app 
    <Directory d:\xampp\htdocs\socket1.app> 
     Allow from all 
     AllowOverride All 
     Order allow,deny 
    </Directory> 
</VirtualHost> 

<VirtualHost *:80> 
    Servername socket2.app 
    DocumentRoot d:\xampp\htdocs\socket2.app 
    <Directory d:\xampp\htdocs\socket2.app> 
     Allow from all 
     AllowOverride All 
     Order allow,deny 
    </Directory> 
</VirtualHost> 

当我打开http://socket1.app其发送连接请求到WS://socket1.app:8080和 http://socket2.app发送到WS: //socket2.app:8080。

一个基于ratchet php的两个应用程序都有php服务器服务。 但应用程序连接到相同的PHP服务器(它已被首先启动)。

我该如何将这些套接字连接分配给每个应用程序php服务器服务?

您不能在同一个端口上运行两个websocket服务器实例。

您必须在不同的端口(例如8080和8081)上运行它们,或者根据主机名来划分应用逻辑。

在RatchetPHP你可以做这样的:

public function onMessage(ConnectionInterface $conn, $msg) 
{ 
    // The host name that the client connected to (socket1.app or socket2.app) 
    $host = $conn->WebSocket->request->getHost(); 

    // ... some logic depending on the host name 
    // if ($host == 'socket1.app') 
    // { 
    // ... 
    // } 
} 

第一种方法是最好,如果你的应用程序的WebSocket有完全不同的逻辑。

+0

感谢您的回答,我已经为应用程序使用了不同的端口。关于你的代码块,我不需要在代码中检查主机,因为应用程序是完全不同的。 – 2015-02-05 12:10:40