【问题标题】:laravel echo server with socket io and redis带有套接字 io 和 redis 的 laravel echo 服务器
【发布时间】:2018-02-16 03:09:30
【问题描述】:

我尝试使用 laravel-echo 服务器和 socket.io 创建实时应用,但客户端没有变成消息

这是我的代码:

.env

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=redis

config/queue.php

 'redis' => [
        'driver' => 'redis',
        'connection' => 'default',
        'queue' => 'default',
        'retry_after' => 90,
 ],

config/database.php

'redis' => [

    'retry_after' => 90,
    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

],

routes/channels.php

Broadcast::channel('messages', function() {
    return true;
}); 

src/echo.js

import Echo from "laravel-echo"

window.Echo = new Echo({
   broadcaster: 'socket.io',
   host:'http://localhost:6001'
});

window.Echo.channel('messages')
  .listen('.newMessage', (message) => {
    debugger;
});

Events/MessagePosted.php

<?php

 namespace App\Events;

 use Illuminate\Broadcasting\Channel;
 use Illuminate\Queue\SerializesModels;
 use Illuminate\Foundation\Events\Dispatchable;
 use Illuminate\Broadcasting\InteractsWithSockets;
 use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class MessagePosted implements ShouldBroadcast {

 use Dispatchable, InteractsWithSockets, SerializesModels;

protected $message;

public function __construct($message)
{
    $this->message = $message;
}

public function broadcastWith()
{
    return [
        'message' => $this->message,
    ];
}

public function broadcastAs()
{
    return 'newMessage';
}

public function broadcastOn()
{
    return new Channel('messages');
}
}

MessageController.php

public function post(Request $request)
{
    event(new MessagePosted($request->get('message')));
} 

Redis 服务器已安装,在 redis-cli PING 命令中返回 PONG。 我使用 php artisan queue:work redis,但是从客户端发送消息后,队列中没有显示任何内容... 客户端连接到 laravel-echo-server,它的返回: [14:04:17] - C3c8UUnTn9dvOPc9AAAA 加入频道:消息。 并处理 POST 请求

【问题讨论】:

  • 你搞定了吗?
  • @CatoMinor 是的,我不知道为什么,但是在我创建了新的 laravel 应用程序之后,它终于可以工作了..bitbucket.org/karpalex/student-room 在这里你可以看到使用套接字示例工作的 laravel,不确定其他逻辑,但是 larave + socket io 完美运行
  • 谢谢!也许我也需要创建一个新的 laravel 项目。 :|

标签: php laravel redis socket.io laravel-echo


【解决方案1】:

您正在收听.newMessage,但改为发送.App.Events.MessagePosted

更改 JS 中的监听函数参数:

window.Echo.channel('messages')
  .listen('.App.Events.MessagePosted', (message) => {
  debugger;
});

【讨论】:

    猜你喜欢
    • 2017-03-16
    • 1970-01-01
    • 2020-07-03
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多