Laravel进阶系列笔记--(二十四)Laravel 广播-搭建自己的websockt服务器-5
作者:温新
时间: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');
}
当我没有携带后面两个参数时,其它客户端竟然奇迹般的收到了私有广播的信息,在这里我进行了多次测试,又恢复到写好参数的情况,这次同样可以收到消息。
对于这个关联方法,我确定是没有定义错误的,为什么会出现这样的情况,我不太明白。如果你有兴趣,我可以提供源码,大家一起交流,找出问题。
我是温新
每天进步一点点,就一点点
请登录后再评论