在docker环境中使用laravel websockets包

joe*_*inz 14 websocket laravel docker

用例 n° 1:

脚步

  • 将包安装在 laravel 项目的同一个容器中
  • 在配置推杆的设置.envboradcasting.php像这样
PUSHER_APP_ID=123456789
PUSHER_APP_KEY=AZERTYUIOP
PUSHER_APP_SECRET=QSDFGHJKLMWXCVBN
PUSHER_APP_CLUSTER=mt1
PUSHER_APP_HOST=localhost # or 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
PUSHER_APP_ID=123456789
PUSHER_APP_KEY=AZERTYUIOP
PUSHER_APP_SECRET=QSDFGHJKLMWXCVBN
PUSHER_APP_CLUSTER=mt1
PUSHER_APP_HOST=localhost # or 127.0.0.1
Run Code Online (Sandbox Code Playgroud)
  • 露出口6001Dockerfile项目的容器。
  • 通过php artisan websockets:serve从容器内运行来使用包。
  • 通过WebSocketsTestEvent修补程序会话分派事件来测试包
'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                // 'encrypted' => false,
                'host' => env('PUSHER_APP_HOST'),
                'port' => 6001,
                'scheme' => 'http',
            ],
        ],
Run Code Online (Sandbox Code Playgroud)

用例 n° 2:

脚步

  • 将包安装在 laravel 项目的同一个容器中
  • .env像这样配置推送器设置:
PUSHER_APP_ID=123456789
PUSHER_APP_KEY=AZERTYUIOP
PUSHER_APP_SECRET=QSDFGHJKLMWXCVBN
PUSHER_APP_CLUSTER=mt1
PUSHER_APP_HOST=ssms-app # or the @IP of the conatiner
Run Code Online (Sandbox Code Playgroud)
  • websockets容器创建一个 Dockerfile,如下所示:
FROM php:7.3.3-alpine

RUN apk add --no-cache \
    wget \
    curl \
    # git \
    shadow \
    build-base \
    autoconf \
    # hiredis \
    libxml2-dev \
    zlib-dev \
    libevent \
    libevent-dev \
    openssl-dev \
    gmp-dev \
    icu-dev

RUN docker-php-ext-install \
        pcntl \
        mbstring \
        pdo \
        pdo_mysql \
        tokenizer \
        xml \
        sockets \
        gmp \
        bcmath \
        intl

        # Libevent
RUN pecl install event

RUN apk update

# Cleanup
# apk del .build-deps && \
RUN rm -rf /var/cache/apk/* && \
    rm -rf /tmp/*

RUN mkdir -p /var/www

RUN groupmod -g 1000 www-data && \
    usermod -u 1000 www-data

USER www-data

WORKDIR /var/www/html

EXPOSE 6001

CMD ["php", "artisan", "websockets:serve"]
Run Code Online (Sandbox Code Playgroud)
  • docker-compose.yaml像这样配置:

  ssms-app:
    build:
      context: ./docker/app
      args:
        uid: ${UID}
    container_name: ssms-app
    environment:
      - APACHE_RUN_USER=#${UID}
      - APACHE_RUN_GROUP=#${UID}
    volumes:
      - .:/var/www/html
    ports:
      - ${HOST_PORT}:80
      # - 6001:6001
    links:
      - ssms-redis
      - ssms-sockets
    networks:
      backend:
        aliases:
          - ssms-app

  ssms-sockets:
    build:
      context: ./docker/websockets
    container_name: ssms-sockets
    volumes:
      - .:/var/www/html
    ports:
      - 6001:6001
    networks:
      backend:
        aliases:
          - ssms-sockets
Run Code Online (Sandbox Code Playgroud)

观察:

  • 在这两种情况下,我都遇到相同的问题:

    • 仪表板中的图表,访问后http://localhost:8080/laravel-websockets不显示。

      注意:这是通过'perform_dns_lookup' => trueconfig/websockets.php.

    • 没有任何迹象表明该事件是由仪表板中的包广播的。

    • 除此之外,当从仪表板使用事件创建器时,我在控制台中得到422状态代码
    • 许多开发人员在 docker 环境中使用它时遇到了同样的问题,但是一些用例适用于某些用例而不适用于其他用例

最后,有什么解决办法吗?我被困了大约 3 天

Hus*_*ein 1

也许尝试编辑 .env 文件以host.docker.internal 像这样使用

PUSHER_APP_ID=123456789
PUSHER_APP_KEY=AZERTYUIOP
PUSHER_APP_SECRET=QSDFGHJKLMWXCVBN
PUSHER_APP_CLUSTER=mt1
PUSHER_APP_HOST=host.docker.internal
Run Code Online (Sandbox Code Playgroud)

运行后php artisan config:cache