Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉威尔在不使用推进器的情况下进行广播_Php_Laravel_Websocket_Pusher_Laravel Websockets - Fatal编程技术网

Php 拉威尔在不使用推进器的情况下进行广播

Php 拉威尔在不使用推进器的情况下进行广播,php,laravel,websocket,pusher,laravel-websockets,Php,Laravel,Websocket,Pusher,Laravel Websockets,我在我的Web应用程序中使用Pusher。我的后端是用Laravel构建的,前端是用Angular 10构建的。在我的本地机器上,一切都很好。但是在服务器上它不工作。Laravel事件未得到广播 这是我的广播节目 class DrawOptionsChanged implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public $options; /*

我在我的Web应用程序中使用Pusher。我的后端是用Laravel构建的,前端是用Angular 10构建的。在我的本地机器上,一切都很好。但是在服务器上它不工作。Laravel事件未得到广播

这是我的广播节目

class DrawOptionsChanged implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;
    public $options;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($options)
    {
        $this->options = $options;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('draw_options');
    }
}
使用以下代码调用此命令:

event(new DrawOptionsChanged($data));
public function optionChanged(Request $request)
    {
        $major = $request->input('major');
        $degree = $request->input('degree');
        $gender = $request->input('gender');
        $draw = $request->input('draw');
        $generate = $request->input('generate');
        $data = [
            'major' => $major,
            'draw' => $draw,
            'gender' => $gender,
            'degree' => $degree,
            'generate' => $generate,
        ];

        $drawData = Draw::where('id', $draw)->first();
        $drawData->current_gender = $gender;
        $drawData->current_qualification_type = $degree;
        $drawData->current_major = $major;
        $drawData->save();

        try {
            event(new DrawOptionsChanged($data));
        } catch (\Exception $exception) {
            $exception->getMessage();
        }
        return response()->json([
            'message' => 'success'
        ]);
    }
在我本地的机器里,一切都运转得很好。但在服务器中,客户端和laravel webSockets url都已连接,但其中任何一个都未接收到事件

在broadcasting.php中

'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'),
                'useTLS' => false,
                'encrypted' => false,
//                'host' => '162.214.125.121',
                'host' => '127.0.0.1',
                'port' => 6001,
                'scheme' => 'http'
            ],
        ],
我注意到,事件正在通过websocket url进行广播,客户端也收到了。。。但从代码上看,他们不会被广播。。。在本地机器中,一切都能正常工作

客户端连接代码

this.pusher = new Pusher(environment.pusher.key, {
      cluster: environment.pusher.cluster,
      wsHost: '162.214.125.121',
      // wsHost: '127.0.0.1',
      wsPort: 6001,
      encrypted: false,
      forceTLS: false,
    });
    this.channel = this.pusher.subscribe('draw_options');
    Pusher.log = (msg) => {
      console.log(msg);
    };
this.pusherService.channel.bind('pusher:subscription_succeeded', function(members) {
          console.log('successfully subscribed!');
        });
        this.pusherService.channel.bind('App\\Events\\DrawOptionsChanged', res => {
          const data = res.options
          this.major = data.major
          this.degree = data.degree
          this.gender = data.gender
          if (data.generate == 1) {
            this.getResult()
          }
        });
客户端绑定代码

this.pusher = new Pusher(environment.pusher.key, {
      cluster: environment.pusher.cluster,
      wsHost: '162.214.125.121',
      // wsHost: '127.0.0.1',
      wsPort: 6001,
      encrypted: false,
      forceTLS: false,
    });
    this.channel = this.pusher.subscribe('draw_options');
    Pusher.log = (msg) => {
      console.log(msg);
    };
this.pusherService.channel.bind('pusher:subscription_succeeded', function(members) {
          console.log('successfully subscribed!');
        });
        this.pusherService.channel.bind('App\\Events\\DrawOptionsChanged', res => {
          const data = res.options
          this.major = data.major
          this.degree = data.degree
          this.gender = data.gender
          if (data.generate == 1) {
            this.getResult()
          }
        });

广播代码:

event(new DrawOptionsChanged($data));
public function optionChanged(Request $request)
    {
        $major = $request->input('major');
        $degree = $request->input('degree');
        $gender = $request->input('gender');
        $draw = $request->input('draw');
        $generate = $request->input('generate');
        $data = [
            'major' => $major,
            'draw' => $draw,
            'gender' => $gender,
            'degree' => $degree,
            'generate' => $generate,
        ];

        $drawData = Draw::where('id', $draw)->first();
        $drawData->current_gender = $gender;
        $drawData->current_qualification_type = $degree;
        $drawData->current_major = $major;
        $drawData->save();

        try {
            event(new DrawOptionsChanged($data));
        } catch (\Exception $exception) {
            $exception->getMessage();
        }
        return response()->json([
            'message' => 'success'
        ]);
    }
试试这个拉威尔回声

Echo.channel(“绘制选项”)
.listen(“DrawOptions已更改”,res=>{
const data=res.options
this.major=data.major
this.degree=data.degree
this.gender=data.gender
if(data.generate==1){
这个文件名为getResult()
}
}
);

你能给你的客户输入监听代码吗?@KamleshPaul在问题中添加了客户代码…试试laravel
echo
可能会有帮助我的客户不在laravel项目内。这是一个单独的angular 10项目。
laravel echo
是一个javascript库,你可以在任何地方使用它,只要有长时间的备份就是Laravelb,但是从日志中我发现事件没有被广播。就像在本地机器中推送事件一样,我会在控制台中获得一个日志。。。但在服务器中,当事件被广播时,我并没有看到日志消息。。所以这意味着这个问题是从后台来的。。。它在本地机器中触发。。。但在服务器中它不是。。。非常奇怪的事件(新的DrawOptionChanged($data));