无法在docker内部使用laradock将消息发送到laravel上的websocket

问题描述

我仍然对我的解释感到困惑。现在,我将laravel与laradock结合使用,并在docker上插入。现在,我尝试在其上实现websocket。在我完成所有安装和设置之后。我现在仍然能够发送消息。这是我到目前为止所做的事情

docker版本2.3.0.3

compose.json

"beyondcode/laravel-websockets": "1.4.1","pusher/pusher-PHP-server": "3.4.1",

package.json

"laravel-echo": "1.8.1","pusher-js": "4.3.1",

在工作区/ Dockerfile中添加

EXPOSE 6001

在docker-compse.yml中添加

services:
  workspace:
    ports:
      - "6001:6001"

laravel-echo-server:
      build:
        context: ./laravel-echo-server
      volumes:
        - ./laravel-echo-server/laravel-echo-server.json:/app/laravel-echo-server.json:ro
      ports:
        - "${LaraVEL_ECHO_SERVER_PORT}:6001"
      links:
        - redis
      networks:
        - frontend
        - backend

当我检查docker-compose ps时。这个结果


           Name                          Command               State                              Ports                            
-----------------------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up      2375/tcp,2376/tcp                                          
laradock_mongo_1              docker-entrypoint.sh mongod      Up      0.0.0.0:27017->27017/tcp                                    
laradock_MysqL_1              docker-entrypoint.sh MysqLd      Up      0.0.0.0:3306->3306/tcp,33060/tcp                           
laradock_Nginx_1              /docker-entrypoint.sh /bin ...   Up      0.0.0.0:443->443/tcp,0.0.0.0:80->80/tcp,0.0.0.0:81->81/tcp
laradock_PHP-fpm_1            docker-PHP-entrypoint PHP-fpm    Up      9000/tcp                                                    
laradock_PHP-worker_1         /usr/bin/supervisord -n -c ...   Up                                                                  
laradock_PHPmyadmin_1         /docker-entrypoint.sh apac ...   Up      0.0.0.0:8084->80/tcp                                        
laradock_redis_1              docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp                                      
laradock_workspace_1          /sbin/my_init                    Up      0.0.0.0:6001->6001/tcp                                    

在config \ broadcasting.PHP

'connections' => [

        'pusher' => [
            'driver' => 'pusher','key' => env('PUSHER_APP_KEY'),'secret' => env('PUSHER_APP_SECRET'),'secret' => null,'app_id' => env('PUSHER_APP_ID'),'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),'encrypted' => false,'host' => 'localhost','port' => 6001,'scheme' => 'http','curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,CURLOPT_SSL_VERIFYPEER => 0,]
            ],],

位于config \ websockets.PHP

    'dashboard' => [
        'port' => env('LaraVEL_WEBSOCKETS_PORT',6001),'apps' => [
        [
            'id' => env('PUSHER_APP_ID'),'name' => env('APP_NAME'),'path' => env('PUSHER_APP_PATH'),'capacity' => null,'enable_client_messages' => false,'enable_statistics' => true,'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,

在resource \ js \ bootstrap.js

import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
    broadcaster: 'pusher',key: 'websocketkey',wsHost: window.location.hostname,wsPort: 6001,encrypted: false,disableStats: true,enabledTransports: ['ws','wss']
});

我将显示消息放入app.blade.PHP

   <script>
        Echo.channel('campaign')
        .listen('DeckCompleteMessage',(e) => {
            console.log('Got event...');
            console.log("Websocket: "+e);
        });
    </script>

然后我运行此命令来运行websocket

PHP artisan websocket:serve

直到此设置。可以连接http:// localhost / laravel-websockets。但我无法发送的问题

这是我发送消息的方式。

首先,我在app \ Console \ Commands \ TestEventCommand.PHP中创建命令代码

<?PHP

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Events\DeckCompleteMessage;

class TestEventCommand extends Command
{ 
    protected $signature = 'event:test {id?}';
 
    protected $description = 'Testing Event sending using Websocket';
 
    public function __construct()
    {
        parent::__construct();
    }
 
    public function handle()
    {
        \Log::info('sending broadcast from test event');
        broadcast(new DeckCompleteMessage($this->argument('id')));
    }
}

然后我在app \ Events \ DeckCompleteMessage.PHP中创建新的事件文件

<?PHP

namespace App\Events;

use Auth;
use Illuminate\broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\broadcasting\PrivateChannel;
use Illuminate\broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\dispatchable;
use Illuminate\broadcasting\InteractsWithSockets;
use Illuminate\Contracts\broadcasting\Shouldbroadcast;

class DeckCompleteMessage implements Shouldbroadcast
{
    use dispatchable,InteractsWithSockets,SerializesModels;
 
    public $user;
 
    public $message;
 
    public function __construct($message)
    {
        $this->user = Auth::user();
        $this->message = $message;
    }
 
    public function broadcastOn()
    {
        return new Channel('campaign');
    }
}

所以在终端上,我只运行命令PHP artisan event:test 123

但是什么也没发生。我该如何解决这个问题..对此真的感到困惑

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)