Php 使用Laravel的实时用户消息

Php 使用Laravel的实时用户消息,php,ajax,laravel,broadcast,long-polling,Php,Ajax,Laravel,Broadcast,Long Polling,我真的需要一些帮助,以及这个问题的例子。我需要在我的网站上有一个像Facebook这样的对话系统(在对话中发送消息,在不刷新页面的情况下加载消息)。我认为有很多方法可以解决这个问题:广播、长轮询或简单的AJAX。如果我能举一个使用广播的例子,我将不胜感激。下面是我为实现这一点而提出的建议 表格对话 Schema::create('conversations',函数(Blueprint$table){ $table->increments('id'); $table->integer('user_

我真的需要一些帮助,以及这个问题的例子。我需要在我的网站上有一个像Facebook这样的对话系统(在对话中发送消息,在不刷新页面的情况下加载消息)。我认为有很多方法可以解决这个问题:广播、长轮询或简单的AJAX。如果我能举一个使用广播的例子,我将不胜感激。下面是我为实现这一点而提出的建议

表格
对话

Schema::create('conversations',函数(Blueprint$table){
$table->increments('id');
$table->integer('user_one')->unsigned()->index()->comment('Sender ID');
$table->foreign('user_one')->references('id')->on('users')->onDelete('cascade');
$table->integer('user_two')->unsigned()->index()->comment('inerrocator's ID');
$table->foreign('user_two')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
表格
消息

Schema::create('messages',函数(Blueprint$table){
$table->increments('id');
$table->text('message')->comment('messagetext');
$table->boolean('is_seen')->默认值(0);
$table->boolean('deleted_from_sender')->默认值(0);
$table->boolean('deleted_from_receiver')->默认值(0);
$table->integer('user_id')->unsigned()->index()->comment('Sender id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->integer('conversation_id')->unsigned()->index()->comment('conversation id');
$table->foreign('conversation_id')->references('id')->on('conversations')->onDelete('cascade');
$table->timestamps();
});
控制器

公共函数sendMessage($id,SendMessageRequest$request)
{
如果($id==Auth::id())
{
返回重定向('/');
}
$conversation=conversation::其中('user\u one',[Auth::id(),$id])
->其中('user_two',[$id,Auth::id()
->first();//获取会话数据
/**
*当不存在时创建一个新的conv
*/
如果($conversation==NULL)
{
$newConversation=Conversation::create([
'user_one'=>Auth::id(),
'user_two'=>$id,
]);
}
/**
*创建消息
*/
消息::创建([
'message'=>$request->get('message'),
'user_id'=>Auth::id(),
'conversation\u id'=>$conversation!==NULL?$conversation->id:$newConversation->id,
]);
返回重定向(路由('mails.chat',$id));
}
/**
*聊天记录
*/
公共功能聊天($id)
{
$user=user::find($id);//获取用户数据
$title='crmk_ааБС'.$user->name.'.$user->lastname;//页面标题
如果($id==Auth::id())
{
返回重定向('/');
}
$conversation=conversation::其中('user\u one',[Auth::id(),$id])
->其中('user_two',[$id,Auth::id()
->first();//获取转换数据
$messages='';
如果($conversation!==NULL)
{
$messages=Message::where('conversation_id',$conversation->id)->paginate(30);//获取消息
}
返回视图('mails.chat'[
“title”=>$title,
“对话”=>$conversation,
“消息”=>$messages,
“用户”=>$user,
]);
}
示范对话

类会话扩展模型
{
受保护的$table='conversations';
受保护的$fillable=['user\u one'、'user\u two'];
受保护的$dates=[“创建日期”,“更新日期];
公共函数用户(){
返回$this->belongtomany('App\User');
}
}
型号信息

类消息扩展模型
{
受保护的$table='messages';
受保护的$fillable=['message'、'is_seen'、'deleted_from_sender'、'deleted_from_receiver'、'user_id'、'conversation_id'];
受保护的$dates=[“创建日期”,“更新日期];
公共函数用户(){
返回$this->belongtomany('App\User');
}
公共功能会话(){
返回$this->belongstomy('App\Conversation');
}
}
查看

@extends('layouts.app'))
@节(“内容”)
{{--简单显示消息--}
@if($conversation!==NULL&&count($messages)!==0)
@foreach($messages作为$message)
@php($sender=App\User::find($message->User\u id))
{{$sender->name}{{$sender->lastname}}
{{$message->message} @endforeach @否则 没有消息。 @恩迪夫 {{csrf_field()}} 信息:
发送! @端部

谢谢你帮我做这件事。

你要找的是。这将与redis服务器、socket.io和。这真的很好,很容易安装。查看示例应用程序

如果您要忽略MS EdgeGoogle“laravel聊天应用程序”@Fr0zenFyr,则还有HTML5服务器发送的事件。这对我没有帮助。更糟糕的是:c没有实施私人聊天的例子。你试过了吗:@nathan6137谢谢你的回答。我想使用一个应用程序,将在网站内工作,而不使用第三方服务(如Pusher)。不幸的是,它只支持100个用户,免费收费计划。。。