【问题标题】:laravel-echo-server doesn't broadcast on eventslaravel-echo-server 不广播事件
【发布时间】:2020-07-28 23:33:38
【问题描述】:

我目前正在使用 Laravel 中的 laravel-echo-server 包处理聊天网页,我正在尝试显示一条消息以向一个用户发送消息并实时接收该消息,但是当我发送消息时它会加载在我的聊天中,但在我刷新站点之前,其他用户没有收到任何内容。 我认为 laravel-echo-server 没有正确广播,但我不知道如何解决它。 我检查了事件是否正确执行并且确实执行了,但我什么也没收到。 你能帮助我吗? 我正在使用 redis 有一个广播器,它似乎可以正常工作我将它添加到 .env 作为 BROADCAST_DRIVER=redisQUEUE_CONNECTION=redis

ChatApp.vue

     ......
mounted() {
    console.log(this.user);
    Echo.private(`messages.${this.user.id}`)
     .listen('NewMessage', (e) => {
          console.log(e);
          if (this.selectedContact && e.message.from == this.selectedContact.id){
                    this.saveNewMessage(e.message);
                    alert('fired');
                }
      });

channels.php 验证用户之间的消息


Broadcast::channel('messages.{id}', function ($user, $id) {
    //dd($user->id, $id);
    var_dump($user);
    return (int) $user->id === (int) $id;
});

NewMessage.php 这是我的活动

class NewMessage implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $message;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct(Message $message)
    {
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('messages.'.$this->message->to);
    }
    public function broadcastWith()
    {
        return ["message" => $this->message];
    }
}

ContactsController.php 我在用户向其他用户发送消息和广播后使用发送功能


Im getting this in my terminal when a user send a message to other user but the other user doesn't receive noting until I refresh


C:\laragon\www\newchat
λ laravel-echo-server start

L A R A V E L  E C H O  S E R V E R

version 1.6.1

⚠ Starting server in DEV mode...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

[15:28:39] - Preparing authentication request to: http://newchat.test
[15:28:39] - Sending auth request to: http://newchat.test/broadcasting/auth

[15:28:40] - hq3MFtdUmFgfBB7WAAAA authenticated for: private-messages.2
[15:28:40] - hq3MFtdUmFgfBB7WAAAA joined channel: private-messages.2
[15:28:59] - Preparing authentication request to: http://newchat.test
[15:28:59] - Sending auth request to: http://newchat.test/broadcasting/auth

[15:29:00] - hf8Ginp5is-fyZLGAAAC authenticated for: private-messages.1
[15:29:00] - hf8Ginp5is-fyZLGAAAC joined channel: private-messages.1
Channel: chatapp_database_private-messages.7
Event: App\Events\NewMessage
...
class ContactsController extends Controller
{
    public function get()
    {
        $contacts = User::where('id', '!=' ,auth()->id())->get();
        return response()->json($contacts);
    }

    public function getMessagesFor($id)
    {
        $messages = Message::where('from', $id)->orWhere('to', $id)->get();
        return response()->json($messages);
    }
    public function send(Request $request)
    {
        $message = Message::create([
            'from' => auth()->id(),
            'to' => $request->contact_id,
            'text' => $request->text
        ]);
        broadcast(new NewMessage($message));
        return response()->json($message);
    }
}

...

我也使用这个命令与 laravel-echo-server 一起执行

 php artisan queue:listen --tries=1

【问题讨论】:

    标签: php laravel redis socket.io


    【解决方案1】:

    只需添加到您的活动中

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

    然后在听.message

     Echo.private(`messages.${this.user.id}`)
         .listen('.message', (e) => {
              console.log(e);
              if (this.selectedContact && e.message.from == this.selectedContact.id){
                        this.saveNewMessage(e.message);
                        alert('fired');
                    }
          });
    

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2020-02-18
      • 2019-09-14
      • 2023-03-04
      • 1970-01-01
      • 2017-02-24
      • 2021-06-21
      • 1970-01-01
      相关资源
      最近更新 更多