- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我尝试了 sereval tuto 来尝试设置 Laravel Redis NodeJs Socket。
而且它不起作用。
到目前为止:- 我的广播触发了,正如我在 Laravel 日志中看到的那样- 我的 redis 服务器工作(我在我的家庭 Controller 中添加了对 Redis 的调用,我可以在日志和 redis-cli 监视器中看到该值 - 我还安装了 Horizon,我可以在 Redis-cli 监视器中看到它的调用)
但是当我的广播触发时,我在 redis-cli 监视器中看不到任何东西
我已经尝试过显而易见的事情(缓存/配置清除/重启/...)
非常感谢您的帮助!
我的家庭 Controller 中的 Redis 调用:工作
Redis::set("foo","bar");
$value = Redis::get("foo");
Log::debug('Redis value :'.$value);
.环境
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=siview
DB_USERNAME=root
DB_PASSWORD=
QUEUE_DRIVER=sync
QUEUE_CONNECTION=sync
CACHE_DRIVER=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
BROADCAST_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
数据库.php
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 60,
],
'cache' => [
'host' => env('REDIS_HOST', '127.0.0.1'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => env('REDIS_CACHE_DB', 1),
],
'pubsub' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 2,
],
],
广播.php
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Broadcaster
|--------------------------------------------------------------------------
|
| This option controls the default broadcaster that will be used by the
| framework when an event needs to be broadcast. You may set this to
| any of the connections defined in the "connections" array below.
|
| Supported: "pusher", "redis", "log", "null"
|
*/
'default' => env('BROADCAST_DRIVER', 'redis'),
/*
|--------------------------------------------------------------------------
| Broadcast Connections
|--------------------------------------------------------------------------
|
| Here you may define all of the broadcast connections that will be used
| to broadcast events to other systems or over websockets. Samples of
| each available type of connection are provided inside this array.
|
*/
'connections' => [
'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' => true,
],
],
'redis' => [
'driver' => 'redis',
'connection' => 'pubsub',
],
'log' => [
'driver' => 'log',
],
'null' => [
'driver' => 'null',
],
],
];
事件
<?php
namespace App\Events;
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;
use App\User;
class SendMessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
private $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('App.User.' . $this->user->id);
}
public function broadcastWith()
{
return ['message' => 'Salut ' . $this->user->name];
}
}
路由 channel
<?php
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.User.{id}', function ($user, $id) {
return true;//(int) $user->id === (int) $id;
});
路由网络
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Auth::routes();
Route::get('/send/{user}', function(\App\User $user){
event(new \App\Events\SendMessageEvent($user));
});
Route::get('/home', 'HomeController@index')->name('home');
Laravel.log 显示我的广播
[2018-11-04 09:39:42] local.INFO: Broadcasting [App\Events\SendMessageEvent] on channels [private-App.User.1] with payload:
{
"message": "Salut nathalie",
"socket": null
}
显示我的家庭 Controller 测试的 redis-cli 监视器
1541324518.159040 [0 127.0.0.1:59334] "SELECT" "0"
1541324518.159776 [0 127.0.0.1:59334] "SET" "foo" "bar"
1541324518.160360 [0 127.0.0.1:59334] "GET" "foo"
最佳答案
我发现了,有点奇怪:
我正在使用 wamp 在 Windows 上工作。
wamp 服务器不是由 Laravel 服务器启动的。
奇怪的是一切似乎都运行良好(没有错误,页面呈现,auth 正在工作......)
我刚开始使用 laravel:php artisan serve现在我可以在 Redis-cli 监视器中看到:
1541328214.873429 [0 127.0.0.1:52962] "SELECT" "2"
1541328214.874260 [2 127.0.0.1:52962] "PUBLISH" "private-App.User.1" "{\"event\":\"App\\\\Events\\\\SendMessageEvent\",\"data\":{\"message\":\"Salut nathalie\",\"socket\":null},\"socket\":null}"
1541328661.366923 [0 127.0.0.1:53078] "SELECT" "2"
1541328661.367643 [2 127.0.0.1:53078] "PUBLISH" "private-App.User.1" "{\"event\":\"App\\\\Events\\\\SendMessageEvent\",\"data\":{\"message\":\"Salut nathalie\",\"socket\":null},\"socket\":null}"
1541328679.554077 [0 127.0.0.1:53083] "SELECT" "2"
1541328679.555197 [2 127.0.0.1:53083] "PUBLISH" "private-App.User.1" "{\"event\":\"App\\\\Events\\\\SendMessageEvent\",\"data\":{\"message\":\"Salut nathalie\",\"socket\":null},\"socket\":null}"
关于Laravel 广播不写入 redis 但直接调用 redis 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53139618/
我已经安装了 composer,但是查看 Laravel 文档,我正在努力解决: “确保将 ~/.composer/vendor/bin 目录放在您的 PATH 中,以便在您的终端中运行 larave
我想在迁移时插入外键而不是在 1 中添加外键值 `public function up() { Schema::table('users', function (Bluepri
这是一个open bug on Github对于 laravel-mongodb 包,但没有任何反应。也许有人知道解决方案..? 选择作为单个文档时,日期显示为日期 { "_id": "5ca
我有一个 Laravel 应用程序,我将其用作 Joomla 中构建的更大应用程序的 API。我真的很喜欢使用 Laravel,并决定在 Joomla 应用程序中使用 Eloquent。我通过在 La
我有两个 Laravel 应用程序使用相同的数据库,因此具有相同的用户和密码。 假设应用程序称为 A 和 B。 如果用户登录 A,我该怎么做才能让他们自动登录 B?因此,如果他们登录到 A,那么当他们
我正在 github 上查看 Laravel 的源代码并注意到有一个 laravel/laravel和一个 laravel/framework .它们都链接到 Laravel 网站上的相同文档,并声明
我正在尝试将 laravel 从 5.4 版本更新到 5.5。我已经按照 Laravel 指南的指示完成了所有操作: https://laravel.com/docs/master/upgrade 当
我尝试从 foreach 向每个用户添加一些新值,但因为我使用 get,现在我不能在响应中使用分页,但我还需要向每个用户添加这些值。有什么想法吗? public function statistics
我有一个链接到销毁按钮的删除链接 $task->id ,'method'=>'DELETE'] ) }}"> delete 这是销毁函数 public function destroy($i
我想在 Laravel 中上传一组文件,但我不确定文件的路径和存储对象。八现在数据已存储,但在我的情况下路径是#。在下图中,我有从前面发送的数据(Vuejs 和我正在使用 vue-upload-com
在使用三向数据透视表时,我很难在 Laravel 中进行预加载。数据库设置如下: +-------+--------+-------+-------------+ | deals | venues |
我一直在从事 laravel 5.7 博客项目。我想评论一篇文章。 我需要实现这个: 登录前,我可以在评论文本区输入任何内容 我提交评论(当然会被auth中间件拦截) 然后我被重定向到登录页面 登录后
我正在尝试为我的应用程序中的文件创建一个临时 URL。我能够将文件上传到 S3 存储桶,并且能够使用方法 \Storage::temporaryUrl($this->url, now()->addHo
如果将 Eloquent 模型作为输入传递给 Laravel 排队作业,但模型在作业在队列中运行之前被删除,会发生什么情况? 例如,我正在使用 Laravel 5.2 构建一个电子商务网站,客户可以在
我正在尝试运行在测试运行之前将数据输入数据库的单元测试。我已经定义了一个设置方法,它为每个我不想要的测试用例运行。设置方法执行良好,没有问题。我想要的是将数据输入数据库一次,然后由所有测试用例使用。所
美好的一天。例如,我有一个带有字段/属性的模型 People: name surname 而且模型也有这个方法: public function FullName() { return "{$
我无法理解 Laravel 存在验证在检查数据库中现有记录方面的工作原理。 例如 带有 user.id = 1 的 POST 请求 是否可以使用验证规则:'id' => 'exists:users'检
我正在使用Laravel 5.2创建站点 我想做的是 INSERT同时3行 新的3行必须包含时间戳created_at updated_at。 使用Query Builder方法insert,是的,它
我试图通过href Action 将一些数据传递给我的 Controller 。我不知道为什么,但是laravel使用 GET 方法传递数据,但是我需要一个 POST 来代替 GET 。我真的不明白为
我有一个问题,我的存储文件夹上的服务器前提每 2 天重置一次。所以我运行这些命令并得到修复: sudo chown -R $USER:www-data storage sudo chown -R $U
我是一名优秀的程序员,十分优秀!