利用laravel和redis构建即时通...

admin 2017-10-05 10:53:27 1740 2 comments

使用laravel内置的laravel-echo搭建聊天室


(1). 新建一个laravel项目

composer create-project —prefer-dist laravel/laravel talk

(2). 下载redis的Windows服务端


传送门:redis,目前只有64位的。



(3). 进入laravel项目命令行输入



npm install,速度慢的,可以换成淘宝镜像,传送门:淘宝npm镜像



(4). 下载laravel官方推荐的socket.io服务器,因为是使用redis做广播,所以要用socket.io,如果你是用官方的pusher就不用下载这个。还有下载laravel-echo包.



命令行输入:npm install -g laravel-echo-server,接着配置laravel-echo-server,输入命令laravel-echo-server init,按照英文提示配置你自己的环境,贴一个我自己的配置





命令行输入:npm install —save laravel-echo,再执行命令composer require predis/predis安装redis客户端



(5). 编写路由


Route::get(‘/normal’,’NormalTalkController@index’);
Route::post(‘/normal/add’,’NormalTalkController@add’);

(6). 编写控制器php artisan make:controller NormalTalkController,控制器方法如下


    public function index()
{
return view(‘normal.index’);
}

public function add(Request $request)
{
$message = request->validate([‘message’=>’required’]);
broadcast(new SendMessage(message[‘message’]))->toOthers();
return response()->json([‘status’=>’success’]);
}

(7). 编写广播事件php artisan make:event SendMessage,修改里面的broadcastOn方法,这里改成普通频道。这里的message成员属性是拿来存放接收的信息,其它订阅此频道的人就能通过这个message拿到别人发的消息,记得这个event事件要实现ShouldBroadcast接口。


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

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

public function broadcastOn()
{
return new Channel(‘everyone’);
}

}

(8). 进入文件bootstrap.js,把laravel-echo引入进来



import Echo from ‘laravel-echo’

window.Echo = new Echo({
broadcaster: ‘socket.io’,
host: window.location.hostname + ‘:6001’
});

(9). 编辑根目录下的webpack.mix.js文件


mix.js(‘resources/assets/js/bootstrap.js’, ‘public/js’)
.sass(‘resources/assets/sass/app.scss’, ‘public/css’);

(10). 命令行输入:npm run dev进行webpack打包,会在public目录下的js文件夹中生成一个bootstrap.js文件


(11). 引入对应的视图文件,在视图的body闭合标签前加入





(12). 解压下载好的redis的Windows服务端,在解压文件夹命令行输入


redis-server redis.windows.conf


(13). 在laravel项目文件夹开两个命令行界面


其中一个输入laravel-echo-server start


另外一个输入php artisan queue:work


最终效果图:




这是一个基于laravel-echo和redis的聊天室demo,期间遇到了很多bug,不过我都解决了,如果你有不清楚的地方,可以随时联系我,完整代码示例托管在码云,传送门:聊天室,有兴趣的可以自己看看。


转载请注明出处,谢谢。




标签
评论一下

评论列表

  • robs 评论:
point 11 code is empty?
  • 2018-09-22 23:54:01
  • 回复
  • 孤单又灿烂的人 回复 robs
sorry for the blog bug,you can find it in https://gitee.com/mxwss/talk/blob/master/resources/views/normal/index.blade.php
  • 2018-09-25 14:41:13
  • 回复