我在 Docker 环境中运行 ReactPHP 来监听 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 中的几个端口,以区分 Internet WebSocket 请求和来自私有 Docker 网络上其他容器的私有消息。所以,为了检测端口,我这样做(使用上面设置的 Guzzle 对象):
$request->getPort();
但是,这让我得到了 10002(互联网端口)而不是内部容器端端口(8081)。我现在有一个映射设备可以查询关联,但是我可以直接获取容器端口吗?
我正在运行 Ratchet 0.36。