Могу ли я получить номер порта в 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.

0

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]