Могу ли я получить номер порта в ReactPHP на локальной стороне соединения?

Я использую ReactPHP в среде Docker для прослушивания сообщений WebSocket. Я использую функцию сопоставления портов следующим образом:

docker run \
    --detach \
    -p 10002:8081 \
    missive-controller

Таким образом, внешний порт 10002 отображается на 8081 внутри контейнера.

Внутри моей реализации MessageComponentInterfaceУ меня есть этот обработчик событий:

public function onMessage(ConnectionInterface $from, $msg)
{
    echo sprintf(
        "Connection %d sent message \"%s\" to WS server\n",
        $from->resourceId,
        $msg
    );

    /* @var $request \Guzzle\Http\Message\EntityEnclosingRequest */
    $request = $from->WebSocket->request;

    // ... do stuff
}

Теперь я слушаю пару портов в ReactPHP, чтобы различать интернет-запросы WebSocket и личные сообщения из других контейнеров в частной сети Docker. Итак, чтобы определить порт, я делаю это (используя объект Guzzle, настроенный выше):

$request->getPort();

Однако это дает мне 10002 (интернет-порт), а не внутренний порт на стороне контейнера (8081). У меня есть картографическое устройство, чтобы найти ассоциацию, но могу ли я получить порт контейнера напрямую?

Я использую Ratchet 0.36.

1 ответ

Мой текущий ответ на это таков: это невозможно, по крайней мере, с версией Ratchet, которую я использую. Я отсканировал $fromи это только кажется, что знает о порте с внешней точки зрения. Единственные ссылки, которые я могу найти в print_r($from) к внутреннему порту есть те, которые я установил в массиве ручного отображения, что не помогает.

Я лениво думал, может ли эта информация сидеть в Ratchet\Server\IoServer экземпляр сервера, поэтому я вставил это в мой слушатель перед запуском цикла и исследовал его print_r() снова. Боюсь, результат тот же; ничто не выскакивает как выглядящий полезным.

Вопреки оригинальному сообщению, мои отображения портов теперь настроены в docker-compose.yml файл, поэтому мое решение сейчас будет добавить эти сопоставления в переменные окружения в одном файле, поэтому им труднее выйти из синхронизации. Я не хочу использовать их, поскольку я использую различные сопоставления портов в зависимости от среды.

Вполне возможно, что версия 0.4 будет поддерживать это, поэтому я вернусь при обновлении.

Другие вопросы по тегам