Websocket с виртуальными хостами apache

У меня есть два виртуальных хоста 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.

Серверные службы php для обоих приложений основаны на храповом php. Но приложения подключаются к одному и тому же php-серверу (который был запущен первым).

Как я могу разделить соединения этих сокетов с каждой службой сервера php приложения?


person joni jones    schedule 02.12.2014    source источник


Ответы (1)


У вас не может быть двух экземпляров сервера веб-сокетов, работающих на одном и том же порту.

Вы должны либо запускать их на разных портах (например, 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')
    // { 
    // ...
    // }
}

Первый подход предпочтительнее, если ваши веб-приложения имеют совершенно другую логику.

person AlexM    schedule 05.02.2015
comment
Спасибо за ответ, я уже использую разные порты для приложений. Что касается вашего блока кода, мне не нужно проверять хост в коде, потому что приложения абсолютно разные. - person joni jones; 05.02.2015