我正在尝试在使用Laravel构建的本地RESTful API中实现Redis发布,目的是为了稍后使用Web Sockets实现聊天系统。我打算稍后从Node.JS服务器读取它们。
我正在使用
我正在
我已经使用
如果我手动在终端实例中使用
当我运行
我正在使用
Redis::publish
将简单消息发布到test-channel
。然而,由于某些原因,Laravel似乎没有将其发布出去。另外,我还注意到当我调用Redis::set
时,无论我设置什么都没有持久化到Redis中,但是使用Redis::get
我可以读取我设置的值。public function redis(Request $request) {
$data = $request->validate([
'message' => 'string|required'
]);
Redis::publish('test-channel', 'a test message');
return 'Done';
}
我正在
api/redis
路由中使用上面的代码:Route::post('/redis', 'API\MessageController@redis');
我已经使用
redis-cli
命令订阅了test-channel
频道。如果我手动在终端实例中使用
redis-cli
发布消息到test-channel
,我可以正确地接收我发布的消息。然而,由于某种原因,它们似乎无法通过Laravel进行发布。当我运行
php artisan serve
并访问上述路由时,我可以注意到Laravel记录了以下内容:[*timestamp*] 127.0.0.1:39448 Accepted
[*timestamp*] 127.0.0.1:39448 Closing
127.0.0.1
后面的端口似乎是随机的。
我尝试了php-redis扩展和predis包,只是为了确保不是它们中的任何一个,但是两者都得到了相同的结果。我目前正在使用php-redis,同时在/etc/php/config.d
中启用了igbinary和redis扩展,并从config/app.php
中删除了Redis别名。
我在Manjaro上使用PHP 7.4、Laravel 6.0和Redis 5.0.7。