Laravel进阶系列笔记--(二十四)Laravel 广播-搭建自己的websockt服务器-5

作者: 温新

分类: 【Laravel】

阅读: 2445

时间: 2021-09-01 13:12:20

作者:温新

时间:2021-07-31

hi,我是温新,一名PHPer

本系列采用Laravel8.x演示。

由于Pusher是在国外,连接非常不稳定,因此,来搭建一个属于自己的websockets服务器,体验飞一般的感觉。

使用Laravel-websockets搭建自己的websockets服务器。

第一步:安装

1)删除composer-lock.json文件

2)composer.json文件加入如下内容

"require":{
    "guzzlehttp/psr7": "^1.5"
}

3)安装

composer install

4)安装

composer require beyondcode/laravel-websockets

**第二步:生成相关文件 **

php artisan vendor:publish 
    
// 输入1
Which provider or tag's files would you like to publish?:
  [0 ] Publish files from all providers and tags listed below
  [1 ] Provider: BeyondCode\LaravelWebSockets\WebSocketsServiceProvider
  [2 ] Provider: Facade\Ignition\IgnitionServiceProvider
  [3 ] Provider: Fideloper\Proxy\TrustedProxyServiceProvider
  [4 ] Provider: Fruitcake\Cors\CorsServiceProvider
  [5 ] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider
  [6 ] Provider: Illuminate\Mail\MailServiceProvider
  [7 ] Provider: Illuminate\Notifications\NotificationServiceProvider
  [8 ] Provider: Illuminate\Pagination\PaginationServiceProvider
  [9 ] Provider: Laravel\Sail\SailServiceProvider
  [10] Provider: Laravel\Tinker\TinkerServiceProvider
  [11] Tag: config
  [12] Tag: cors
  [13] Tag: flare-config
  [14] Tag: ignition-config
  [15] Tag: laravel-errors
  [16] Tag: laravel-mail
  [17] Tag: laravel-notifications
  [18] Tag: laravel-pagination
  [19] Tag: migrations
  [20] Tag: sail
 > 1

第三步:生成迁移文件

php artisan migrate

第四步:启动服务器

php artisan websocket:serve

启动可以通过域名访问:http://你的域名/laravel-websockets进行访问。

第五步:修改广播配置文件

// config/broadcasting.php
'pusher' => [
    'options' => [
        // 新增如下内容
        'host' => '127.0.0.1',
        'port' => 6001,
        'scheme' => 'http'
    ],
],

第六步:修改前端监听websocket服务器

// resources/js/bootstrap.js

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'ef8d661555b6fdf9b528',
    cluster: 'ap3',
    wsHost: window.location.hostname,
    wsPort: 6001,
    forceTLS: false,
    disableStats: true,
});

这样就修改成功啦^_^。

由于Pusher在国外,连接非常不稳定,在测试的过程很难确定为什么不成功。对于广播,我折腾了很多天。包括这两天的测试,都遇到了同样的问题,没有任何异常,广播也广播了出去,但是其它客户端就是收不到信息。

对于这次问题的解决,我仍旧不清楚怎么突然就解决了。我只操作如下:

// Models/Topic.php
public function discussions()
{
    return $this->hasMany(Discussion::class,'topic_id','id')->with('user');
}
// 将上面的操作改为如下操作:

public function discussions()
{
    return $this->hasMany(Discussion::class)->with('user');
}

当我没有携带后面两个参数时,其它客户端竟然奇迹般的收到了私有广播的信息,在这里我进行了多次测试,又恢复到写好参数的情况,这次同样可以收到消息。

对于这个关联方法,我确定是没有定义错误的,为什么会出现这样的情况,我不太明白。如果你有兴趣,我可以提供源码,大家一起交流,找出问题。

我是温新

每天进步一点点,就一点点

请登录后再评论