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